如何在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
视窗
- 安装autohotkey。
- 运行autohotkey脚本:
“`
;caps_to_esc.ahk #IfWinActive, ahk_class Vim ; vim window class Capslock::Esc #IfWinActive
“`
Linux的
-
sudo apt-get install xdotool xbindkeys python
。 我们也会使用xprop
和cut
。 - 创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
“`
-
sudo chmod +x ~/caps_to_esc.sh
-
添加新的绑定到
~/.xbindkeysrc
:"~/caps_to_esc.sh" Caps_Lock
-
xbindkeys
(如果你已经启动了xbindkes
然后用killall xbindkeys
先杀掉它)。