WindowsでGVIMを使用しています。そして、CAPSLOCKをCtrl+^にマップしたい
これを行う方法はありますか?
ところで、レジストリハックを使用してCAPSとEscを交換する方法については、Web上に大量のサンプルがありますが、いずれもVIMマップコマンドを使用せず、代わりに外部ツールとレジストリの変更を使用しています。
Linux?Xで、xmodmapを使用してキーマッピングを変更します。
xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
EscをCapsLockキーにマップします。その他の例についてはGoogle。
Vim の外での作業を避けるだけの場合は、次の行を .vimrc に追加できます。
au VimEnter * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
最初の行は、Vim に入ったときにエスケープを Caps Lock キーにマップし、2 行目は、終了時に通常の機能を Caps Lock に戻します。
これには、xorg-xmodmap パッケージがインストールされた Linux が必要です。
窓下?AutoHotkeyを使用します。これはvimマッピングではありませんが、他の人が述べているように、マッピングすることはできません. AHK を使用して、CAPSLOCK を CTRL にマップします。
Capslock(およびControl、Shiftなど)は修飾キーです。つまり、別の通常のキーと一緒に使用して、そのキーの意味を変更します。通常のキーも押されていない限り、OSは修飾キーをアプリケーションに渡しません。たとえば、押すCTRL
ことはアプリケーションに表示されませんが、表示されCTRL-C
ます。
Caps Lock
vimの外で壊れない解決策;caps_to_esc.ahk
#IfWinActive, ahk_class Vim ; vim window class
Capslock::Esc
#IfWinActive
次のコマンドを実行します。
wget -O - https://raw.githubusercontent.com/grabantot/scripts/master/install/install_caps_to_esc.sh | bash
または、次のアクションを手動で実行します。
sudo apt-get install xdotool xbindkeys
. xprop
andも使用しxset
ます (デフォルトでインストールされている必要があります)。~/caps_to_esc.sh
スクリプトを作成します。debug_file=/dev/shm/caps_to_esc.debug
debug_msg () {
echo $(date +%s%3N) "$@" >> $debug_file
}
caps_off () {
is_caps_on="false"
xset q | grep "Caps Lock:\s*on" && is_caps_on="true"
debug_msg "is_caps_on ""$is_caps_on"
[ "$is_caps_on" == "false" ] && return 3
debug_msg "Sending Caps Lock"
debug_msg "ignore_next"
xdotool key Caps_Lock
}
should_ignore="false"
tail -n 1 $debug_file | grep "ignore_next" && should_ignore="true"
if [ "$should_ignore" == "true" ]; then
debug_msg "ignored"
exit 1
fi
echo -n "" > $debug_file
# get wm_class by 'xprop | grep WM_CLASS'
declare -a wm_classes=( \
'WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"' \
'WM_CLASS(STRING) = "gvim", "Gvim"' \
'WM_CLASS(STRING) = "code", "Code"' \
'WM_CLASS(STRING) = "google-chrome", "Google-chrome"' \
)
active_window_id=$(xdotool getactivewindow)
active_window_wm_class=$(xprop -id $active_window_id WM_CLASS)
debug_msg "active_wm_class ""$active_window_wm_class"
detected_wm_class=""
for wm_class in "${wm_classes[@]}"; do
# debug_msg "$wm_class"
if [ "$active_window_wm_class" == "$wm_class" ]; then
detected_wm_class="$wm_class"
debug_msg "detected_wm_class ""$detected_wm_class"
fi
done
[ "$detected_wm_class" == "" ] && exit 2
xdotool keyup "Caps_Lock" # !!! very important
caps_off
debug_msg "Sending Escape"
xdotool key "Escape"
debug_msg "sent"
~/.xbindkeysrc
:"bash $HOME/caps_to_esc.sh"
Caps_Lock
killall xbindkeys && xbindkeys
xbindkeys
Caps_Lock が押されたことを検出し、caps_to_esc.sh
スクリプトを呼び出しますxprop
xdotool
xset
なっている場合はCaps_Lockキーを送信しますxdotool
xbindkeys
弊社から送信された Caps_Lock を検出しますが、無視します私はあなたができるとは思わない。CAPS-LOCKは、vimが見る前にOSによって翻訳されていると思います。したがって、すでに見たレジストリハックのように、OSレベルでハックを行う必要があります。
編集:autohotkeyはvim-OSギャップを埋めるために使用できるように見えます。このように、サードパーティのアプリがOSレベルでハッキングを行っており、そのアプリをフックしているだけです。
Linux と Windows (Autohotkey) 用のソリューションがあるので、Mac 用のpckeyboardhackを使用してどこでも CapsLock を再マップすることをお勧めします。
CAPSLOCK
Windowsへの再マップESC
とCTRL
Windows での再マップCAPSLOCK
両方にリマップしたい場合
ESC
(単独で押した場合)CTRL
(他のキーで押された場合) ililimによるこの小さなオープン ソース ソフトウェアを使用できます。ESC
これには管理者権限は必要なくCTRL
、期待どおりに機能しています。
小指を傷つけることなく便利なCTRL + anything
プレスを楽しんだり、MobaXterm で ssh 経由で使用する Vim のモードを切り替えたりするために使用しています。インストールについては、この説明に従ってください。
CAPSLOCK
LinuxへのリマップESC
とCTRL
Linux でのリマップLinux で同じことを行うには、XCAPEを使用できます。Ubuntu にインストールするには、次を使用します。
sudo apt install xcape
実際のマッピングについては、次のようにします。
setxkbmap -option ctrl:nocaps
xcape -e 'Control_L=Escape'
1 番目のコマンドはマップCAPSLOCK
されESC
ますが、2番目のコマンドはCTRL
他のキーで押されたことを処理します。
これを X セッションで永続的に機能させるには、これを に追加し~/.xprofile
ます。