如何在VIM中映射CAPS LOCK键?

我在Windows下使用GVIM。 并且想要将CAPSLOCK映射到Ctrl + ^

任何方式来做到这一点?

顺便说一句,我看到网上的大量样本如何使用registry黑客交换CAPS和Esc,但他们都没有使用VIM地图命令,而是外部工具和registry的变化。

Capslock(和Control,Shift等)是一个修饰键,这意味着它与另一个普通键一起使用来修改该键的含义。 AFAIK操作系统不会将修改键传递给应用程序,除非正常的键也被按下,例如按CTRL键不会被应用程序看到,但是CTRL-C会被按下。

Linux呢? 使用X,使用xmodmap来改变键映射,例如

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

将Esc映射到CapsLock键。 谷歌更多的例子。

在Windows下? 使用AutoHotkey 。 这不是一个vim映射,但正如其他人所说,你不能映射它。 我使用AHK将我的CAPSLOCK映射到CTRL。

如果你的意图只是为了避免在Vim之外工作,你可以把这些行放在你的.vimrc文件中:

 au VimEnter * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape' au VimLeave * !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock' 

当你inputVim时,第一行映射到大写字母locking键,而第二行在退出时返回正常function来大写字母locking。

这需要安装xorg-xmodmap软件包的Linux。

在Linux系统中,这可以使用xmodmap完成。

将其保存在主文件夹中的文本文件中

 ! Swap caps lock and escape remove Lock = Caps_Lock keysym Escape = Caps_Lock keysym Caps_Lock = Escape add Lock = Caps_Lock 

用.capstoescswitc这样的名字保存这个文件

然后通过terminal执行这个文件。

 xmodmap ~/.capstoescswitc 

如果想要尊敬它,只需在脚本文件中切换关键variables。

欲了解更多信息,请参阅此页

对于Mac OS,您可以在“系统偏好设置”中重新映射系统范围内的“大小写locking”键。

按照这个path:

系统首选项>键盘>修饰键

然后点击“caps lock”旁边的下拉框并select“^ Control”。

我不认为你可以。 我相信CAPS-LOCK可能是在vim见过之前由操作系统翻译的。 所以你需要在操作系统级别做一些破解,比如你已经看到的registry黑客。

编辑:autohotkey看起来像它可以用来弥补vim-OS的差距 。 这样,第三方的应用程序正在做操作系统级别的黑客攻击,而你只是在关注那个应用程序。

由于Linux和Windows(Autohotkey)的解决scheme,我想build议使用Mac的pckeyboardhack重新映射CapsLock无处不在。

解决scheme不会破坏VIM之外的Caps Lock

视窗

  1. 安装autohotkey。
  2. 运行autohotkey脚本:

“`

 ;caps_to_esc.ahk #IfWinActive, ahk_class Vim ; vim window class Capslock::Esc #IfWinActive 

“`

Linux的

  1. sudo apt-get install xdotool xbindkeys python 。 我们也会使用xpropcut
  2. 创build一个~/caps_to_esc.sh脚本:

“`

 #!/bin/bash capsOff () { python -c '\ from ctypes import *; \ X11 = cdll.LoadLibrary("libX11.so.6"); \ display = X11.XOpenDisplay(None); \ X11.XkbLockModifiers(display, c_uint(0x0100), c_uint(2), c_uint(0)); \ X11.XCloseDisplay(display) \ ' } 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=$(xprop -root _NET_ACTIVE_WINDOW | cut -f2 -d#) active_window_wm_class=$(xprop -id $active_window_id WM_CLASS) for wm_class in "${wm_classes[@]}"; do # echo "$wm_class" >> xbindkeys.debug if [ "$active_window_wm_class" == "$wm_class" ]; then # echo true >> xbindkeys.debug xdotool getactivewindow key Escape capsOff fi done 

“`

  1. sudo chmod +x ~/caps_to_esc.sh
  2. 添加新的绑定到~/.xbindkeysrc

     "~/caps_to_esc.sh" Caps_Lock 
  3. xbindkeys (如果你已经启动了xbindkes然后用killall xbindkeys先杀掉它)。