web-dev-qa-db-ja.com

VIMでCAPS LOCKキーをマップする方法は?

WindowsでGVIMを使用しています。そして、CAPSLOCKをCtrl + ^にマップしたい

これを行う方法はありますか?

ところで、私はレジストリハックを使用してCAPSとEscを交換する方法をWeb上で見かけますが、いずれもVIM mapコマンドではなく、外部ツールとレジストリの変更を使用します。

53
Evgenyt

Linux? Xでは、xmodmapを使用してキーマッピングを変更します。

xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'

EscをCapsLockキーにマップします。他の例についてはGoogle。

56
Dan Andreatta

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が必要です。

26
rsoren

窓の下? AutoHotkey を使用します。これはvimマッピングではありませんが、他の人が述べているように、マッピングすることはできません。 AHKを使用して、CAPSLOCKをCTRLにマップします。

16
hometoast

Mac OSの場合、「システム設定」でシステム全体の「caps lock」キーを再マップできます。

このパスに従ってください:

システム設定>キーボード>修飾キー

次に、「caps lock」の横にあるドロップダウンボックスをクリックして、「^ Control」を選択します。

12

Capslock(およびControl、Shiftなど)は修飾キーです。つまり、別の通常のキーと共に使用して、そのキーの意味を変更します。私の知る限り、OSは通常のキーも押されていない限り、修飾キーをアプリケーションに渡しません。 CTRLを押してもアプリケーションには表示されませんが、CTRL-Cになります。

11
liwp

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 

崇拝したい場合は、スクリプトファイルのキー変数を切り替えるだけです。

詳細については、これを参照してください ページ

10

Vimの外でCaps Lockを壊さないソリューション

  1. オートホットキーをインストールします。
  2. Autohotkeyスクリプトを実行します。
;caps_to_esc.ahk
#IfWinActive, ahk_class Vim ; vim window class
Capslock::Esc
#IfWinActive

Linux

次のコマンドを実行します:

wget -O - https://raw.githubusercontent.com/grabantot/scripts/master/install/install_caps_to_esc.sh | bash

または、これらのアクションを手動で実行します。

  1. Sudo apt-get install xdotool xbindkeysxpropxsetも使用します(デフォルトでインストールされます)。
  2. ~/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"
  1. 新しいbindnigを~/.xbindkeysrcに追加します。
"bash $HOME/caps_to_esc.sh"
Caps_Lock
  1. killall xbindkeys && xbindkeys

使い方:

  1. xbindkeysはCaps_Lockが押されると検出され、caps_to_esc.shスクリプトを呼び出します
  2. スクリプト内のxpropによるアクティブウィンドウwm_classの検出
  3. wm_classが対象かどうかを確認します(gnome-terminal、vscode、gvim、chrome)。そうでない場合は終了します
  4. xdotoolを介してエスケープキーを送信します
  5. xsetを介してCaps Lockがオンになっているかどうかを確認し、次にxdotoolを介してCaps_Lockキーを送信します
  6. xbindkeysは、送信されたCaps_Lockを検出しますが、無視します
7
grabantot

できるとは思わない。 CAPS-LOCKはおそらくvimが認識する前にOSによって翻訳されていると思います。そのため、すでに見たレジストリハックのように、OSレベルでハックする必要があります。

編集:autohotkeyは、 vim-OSのギャップを埋める に使用できるように見えます。このようにして、サードパーティのアプリがOSレベルでハッキングを行い、あなたはそのアプリをフックするだけです。

4

LinuxとWindows(Autohotkey)には解決策があるため、Macで pckeyboardhack を使用してCapsLockをどこにでも再マップすることをお勧めします。

3
Jakob

これを行う理由の1つは、他の人が述べたように、通常のモードでcapslockをオンにしないようにするために、ソフトcapslockを作成することだと思います。 vimcaps プラグインを使用して、挿入モードを終了するときにcapslockをオフにしましたが、うまくいくようです。

0
stu-b-doo

Macでは、カラビナを使用することもできます( https://pqrs.org/osx/karabiner/

$ brew cask install karabiner-elements

インストールしたら、capslockキーをescキーにマッピングできます変更タブ。警告は、これがシステム全体であるということです。つまり、どこでもcapslockキーを失います。 capslockが必要なIMO。

0
Jimmy M.G. Lim