72

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

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

ところで、レジストリハックを使用してCAPSとEscを交換する方法については、Web上に大量のサンプルがありますが、いずれもVIMマップコマンドを使用せず、代わりに外部ツールとレジストリの変更を使用しています。

4

16 に答える 16

64

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

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

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

于 2010-02-01T14:16:26.667 に答える
46

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

于 2014-01-15T01:14:46.173 に答える
16

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

于 2010-02-01T12:30:28.347 に答える
10

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

于 2010-02-01T12:26:40.583 に答える
10

Caps Lockvimの外で壊れない解決策

ウィンドウズ

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

Ubuntu

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

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

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

  1. sudo apt-get install xdotool xbindkeys. xpropandも使用しxsetます (デフォルトでインストールされている必要があります)。
  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. に新しいバインドを追加~/.xbindkeysrc:
"bash $HOME/caps_to_esc.sh"
Caps_Lock
  1. killall xbindkeys && xbindkeys

使い方:

  1. xbindkeysCaps_Lock が押されたことを検出し、caps_to_esc.shスクリプトを呼び出します
  2. スクリプトでアクティブなウィンドウ wm_class を検出するxprop
  3. wm_class に関心があるかどうか (gnome-terminal、vscode、gvim、chrome) を確認し、関心がない場合は終了します。
  4. エスケープキーを送信xdotool
  5. Caps Lockがオンになっているかどうかを確認し、オンにxsetなっている場合はCaps_Lockキーを送信しますxdotool
  6. xbindkeys弊社から送信された Caps_Lock を検出しますが、無視します
于 2017-10-01T21:14:41.680 に答える
5

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

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

于 2010-02-01T12:23:53.603 に答える
3

Linux と Windows (Autohotkey) 用のソリューションがあるので、Mac 用のpckeyboardhackを使用してどこでも CapsLock を再マップすることをお勧めします。

于 2012-11-14T09:46:03.790 に答える
2

CAPSLOCKWindowsへの再マップESCCTRLWindows での再マップ

CAPSLOCK両方にリマップしたい場合

  1. ESC(単独で押した場合)
  2. to CTRL(他のキーで押された場合) ililimによるこの小さなオープン ソース ソフトウェアを使用できます。

ESCこれには管理者権限は必要なくCTRL、期待どおりに機能しています。

小指を傷つけることなく便利なCTRL + anythingプレスを楽しんだり、MobaXterm で ssh 経由で使用する Vim のモードを切り替えたりするために使用しています。インストールについては、この説明に従ってください。

CAPSLOCKLinuxへのリマップESCCTRLLinux でのリマップ

Linux で同じことを行うには、XCAPEを使用できます。Ubuntu にインストールするには、次を使用します。

sudo apt install xcape

実際のマッピングについては、次のようにします。

setxkbmap -option ctrl:nocaps
xcape -e 'Control_L=Escape'

1 番目のコマンドはマップCAPSLOCKされESCますが、2番目のコマンドはCTRL他のキーで押されたことを処理します。

これを X セッションで永続的に機能させるには、これを に追加し~/.xprofileます。

于 2020-05-19T14:01:56.550 に答える