为啥在 Vim 中将 Esc 重新映射到 CAPS LOCK 如此复杂?
Posted
技术标签:
【中文标题】为啥在 Vim 中将 Esc 重新映射到 CAPS LOCK 如此复杂?【英文标题】:Why is so complicated to remap Esc to CAPS LOCK in Vim?为什么在 Vim 中将 Esc 重新映射到 CAPS LOCK 如此复杂? 【发布时间】:2011-01-09 20:14:00 【问题描述】:我看到了 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?
【问题讨论】:
paxdiablo,这非常常见。为什么?因为 CAPS LOCK 是有史以来最没用的钥匙,但拥有黄金地段。它是一个更方便的位置,例如,另一个 ctrl 键,或者,如果您曾经使用过 Vim,则可以使用急需的 ESC 键。 “也许你应该考虑一个非模态编辑器”你显然不使用 Vim。 如果重新映射到大写字母,就不必扔掉键盘了。 @Pierre:我是 ESC 映射器的 CAPS-LOCK 之一。我可以确认在没有重新映射的情况下在机器上工作对我来说很烦人。然而,提高生产力仍然值得,因为 99% 的时间我都在我自己的机器上工作(或我自己的机器上的 SSH),它有重新映射。 我使用Uncap。我写它是为了方便地将 Caps Lock 映射到 Escape。它只需要从project page 下载uncap.exe
并双击它。无需安装、配置或重新启动。因此,在我自己以外的机器上也很容易使用它。使用uncap -k
命令杀死该程序可以轻松关闭映射。此外,该项目还附带了detailed documentation 在 Windows、Linux 和 Mac OS/X 上映射键的其他方式。
【参考方案1】:
我建议您为此使用 AutoHotkey。
您可以更改每个应用程序的热键:
SetTitleMatchMode,2
#IfWinActive,VIM
CAPSLOCK::ESC
return
#IfWinActive
CAPSLOCK::CTRL
return
这个脚本,例如设置 caps 在 vim 中转义,并控制其他任何地方。
【讨论】:
@jay 但是大写锁定在哪里结束了? @sayth 大多数人从不需要它——我已经好几年没有它了。 我不得不为 gVim 使用#IfWinActive ahk_class Vim
【参考方案2】:
capslock 键没有 vim 键标识符,因此您必须使用扫描码来完成。
这就像试图将 ctrl 键或 shift 键映射到某个东西 - 这些键本身不会做任何事情,它们是键修饰符,因此它们不能以相同的方式被捕获。
【讨论】:
【参考方案3】:映射必须在操作系统级别而不是 vim 中完成,因此复杂性来自操作系统。例如,在我的 Ubuntu 机器上,~/.Xmodmap
中有以下内容:
! Esc on caps lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape
但是,我认为 REGEDIT 脚本并没有那么糟糕。有点丑,但只有两行!
【讨论】:
更简单:setxkbmap -option caps:escape
或将其添加到 X/input 配置的相关部分。
@ephemient 感谢您的提示。
也可以通过 GUI 执行此操作。转到系统/首选项/键盘,打开布局选项卡,打开选项对话框。在 Caps Lock 标题下,有一系列不同的行为可供选择,其中之一是交换 Caps Lock 和 ESC。【参考方案4】:
您也可以试试这个:SharpKeys。 我用它交换了 CapLock 和 Esc。
【讨论】:
【参考方案5】:您也可以使用 Ctrl-C 转义(至少在 vim 中可用)。这是我通常使用的。不过,我通常会交换控件和大写锁定,并且通过 Windows 中的注册表设置和 ubuntu 中的键盘配置来完成。
编辑:正如@mMontu 善意指出的那样,Ctrl-C 比 Esc 更残酷:正如this appropriate question 中所述,
vim 不会检查你是否只写了一个 缩写,它不会运行你的花哨的自动命令 每次离开插入模式时都会设置插件
我没有注意到,因为我的vimming还没有那么先进。
【讨论】:
你应该知道 Ctrl-C 和 ESC 之间的细微差别:***.com/questions/5030164/…【参考方案6】:另一个对我很有效的替代方法是使用在 this website
本质上:安装 Microsoft 的 Keyboard Layout Creator,然后编辑其源代码以允许重新映射 CAPS LOCK 并创建您自己的自定义布局。
【讨论】:
【参考方案7】:在 Windows 上将 CAPSLOCK
重新映射为 ESC
和 CTRL
我已经描述过的一个非常好的工具 in this answer 使您可以将 CAPSLOCK
重新映射到两者
-
到
ESC
(单独按下时)和
到CTRL
(用其他键按下时)
只需使用 ililim 的this little piece of open source software。
您不需要管理员权限,ESC
和 CTRL
仍按预期工作。
我用它来享受方便的CTRL + anything
按压而不伤到我的小指,并在我通过 MobaXterm 中的 ssh 使用的 Vim 中切换模式。安装只需关注this description。
【讨论】:
以上是关于为啥在 Vim 中将 Esc 重新映射到 CAPS LOCK 如此复杂?的主要内容,如果未能解决你的问题,请参考以下文章
OSX:以编程方式重新映射 Caps Lock 的功能(通过系统偏好设置)?