为什么在Vim中将Esc重新映射到CAP LOCK非常复杂?

我看到了vim wiki的提示,它说为了重新映射Esc到CAP LOCK,你必须编辑下面的窗口代码:

REGEDIT4 [HKEY_CURRENT_USER\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00 

是否有可能通过添加或修改_vimrc中的行重新将Esc重新映射到CAP LOCK?

我建议你为此使用AutoHotkey。

您可以执行每个应用程序热键更改:

 SetTitleMatchMode,2 #IfWinActive,VIM CAPSLOCK::ESC return #IfWinActive CAPSLOCK::CTRL return 

例如,这个脚本在vim中设置了大写字母,并在其他地方控制。

大小写锁定键没有vim密钥标识符,所以您必须使用扫描代码来完成。

这就像试图将ctrl键或shift键映射到某些东西 – 这些键本身不做任何事情,它们是关键修饰符,所以它们不能以相同的方式陷入困境。

映射必须在操作系统级而不是vim中完成,所以复杂度来自操作系统。 例如,在我的Ubuntu机器上,我在~/.Xmodmap有以下~/.Xmodmap

 ! Esc on caps lock remove Lock = Caps_Lock keysym Caps_Lock = Escape 

但是,我不认为REGEDIT脚本是如此糟糕。 这有点丑,但只有两行!

你也可以试试这个: SharpKeys 。 我换了CapLock和Esc。

你也可以使用Ctrl-C来转义(至少在vim中可用)。 这是我通常使用的。 我通常交换控制和capslock,但是,通过在Ubuntu和Windows的键盘配置注册表设置。

编辑:如@ mMontu请注意,Ctrl-C比Esc更残忍:正如在这个适当的问题所述 ,

vim不会去检查你是否写了一个缩写的一部分,而且它不会运行插件每次离开插入模式时所设置的花式自动命令

我没有注意到,因为我的调子还没有那么先进。

另一个替代方法对我来说很好,就是使用这个网站上的说明

基本上:安装Microsoft的键盘布局创建器,然后编辑其源代码,以允许重新映射CAPS LOCK并创建自己的自定义布局。