繁体   English   中英

为什么在 Vim 中将 Esc 重新映射到 CAPS LOCK 如此复杂?

[英]Why is so complicated to remap Esc to CAPS LOCK in Vim?

我看到了 vim wiki 提示,它说为了将 Esc 重新映射到 CAPS LOCK,您必须编辑以下 Windows 代码:

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 重新映射到 CAPS 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 脚本并没有那么糟糕。 有点丑,但只有两行!

另一种对我来说效果很好的替代方法是使用本网站中的说明

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

您也可以使用 Ctrl-C 转义(至少在 vim 中可用)。 这是我通常使用的。 不过,我通常会交换控制和大写锁定,并且是通过 Windows 中的注册表设置和 ubuntu 中的键盘配置来实现的。

编辑:正如@mMontu 亲切地指出,Ctrl-C 比 Esc 更残酷:正如在这个适当的问题中所述

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

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

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

在 Windows 上将CAPSLOCK重新映射到ESCCTRL

我已经在这个答案中描述的一个非常好的工具使您可以将CAPSLOCK重新映射到两者

  1. ESC (单独按下时)和
  2. CTRL (当用其他键按下时)

只需使用ililim 的这个小小的开源软件

为此,您不需要管理员权限,并且ESCCTRL仍在按预期工作。

我用它来享受方便的CTRL + anything按下而不会伤害我的小指,并在 Vim 中切换我通过 MobaXterm 中的 ssh 使用的模式。 安装只需按照此说明进行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM