WindowsでGVIMを使用しています。そして、CAPSLOCKをCtrl + ^にマップしたい
これを行う方法はありますか?
ところで、私はレジストリハックを使用してCAPSとEscを交換する方法をWeb上で見かけますが、いずれもVIM mapコマンドではなく、外部ツールとレジストリの変更を使用します。
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にマップします。
Mac OSの場合、「システム設定」でシステム全体の「caps lock」キーを再マップできます。
このパスに従ってください:
システム設定>キーボード>修飾キー
次に、「caps lock」の横にあるドロップダウンボックスをクリックして、「^ Control」を選択します。
Capslock(およびControl、Shiftなど)は修飾キーです。つまり、別の通常のキーと共に使用して、そのキーの意味を変更します。私の知る限り、OSは通常のキーも押されていない限り、修飾キーをアプリケーションに渡しません。 CTRL
を押してもアプリケーションには表示されませんが、CTRL-C
になります。
Linuxシステムでは、これはxmodmapで実行できます。
これをホームフォルダーのテキストファイルに保存します
! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
このファイルを.capstoescswitcなどの名前で保存します
次に、ターミナルを介してこのファイルを実行します。
xmodmap ~/.capstoescswitc
崇拝したい場合は、スクリプトファイルのキー変数を切り替えるだけです。
詳細については、これを参照してください ページ
Caps Lock
を壊さないソリューション;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
と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
によるアクティブウィンドウwm_classの検出xdotool
を介してエスケープキーを送信しますxset
を介してCaps Lockがオンになっているかどうかを確認し、次にxdotool
を介してCaps_Lockキーを送信しますxbindkeys
は、送信されたCaps_Lockを検出しますが、無視しますできるとは思わない。 CAPS-LOCKはおそらくvimが認識する前にOSによって翻訳されていると思います。そのため、すでに見たレジストリハックのように、OSレベルでハックする必要があります。
編集:autohotkeyは、 vim-OSのギャップを埋める に使用できるように見えます。このようにして、サードパーティのアプリがOSレベルでハッキングを行い、あなたはそのアプリをフックするだけです。
LinuxとWindows(Autohotkey)には解決策があるため、Macで pckeyboardhack を使用してCapsLockをどこにでも再マップすることをお勧めします。
これを行う理由の1つは、他の人が述べたように、通常のモードでcapslockをオンにしないようにするために、ソフトcapslockを作成することだと思います。 vimcaps プラグインを使用して、挿入モードを終了するときにcapslockをオフにしましたが、うまくいくようです。
Macでは、カラビナを使用することもできます( https://pqrs.org/osx/karabiner/ )
$ brew cask install karabiner-elements
インストールしたら、capslockキーをescキーにマッピングできます変更タブ。警告は、これがシステム全体であるということです。つまり、どこでもcapslockキーを失います。 capslockが必要なIMO。