如何在Vimrc函数中检测大写锁定键

11
在使用 Vim 编辑代码时,我经常会在输入大写字母时使用大写锁定键(caps lock)。但是,在输入完大写部分后,我经常忘记关闭大写锁定键,这会带来很多烦恼(比如按 j 移动会向下移动,但是按 J 会将当前行与下一行连接起来)。
通常情况下,我想在退出插入模式时关闭大写锁定键。我该如何在我的 .vimrc 文件中添加一些内容,以便在退出插入模式时关闭大写锁定键?或者,我该如何在我的 .vimrc 文件中添加一些内容,以便在退出插入模式时提醒我(状态栏?蜂鸣声?任何提示都可以),避免我忘记关闭大写锁定键?
谢谢!

3
为什么你不养成先正常输入文本,然后再改变大小写的习惯呢? - romainl
1
这个会有帮助。 - Pavan Manjunath
1
@epsilonhalbe (+romainl):是的,我有类似的东西,但除了这里描述的问题之外,我仍然觉得使用大写锁定键更方便和更快。 - Sam King
我也曾想要这种功能,直到我意识到在Vim中将字母转换为大写是多么容易的事情。那么问题的答案呢?只需不使用大写锁定键,而是使用像gU + 移动或vi"U(将引号内的内容转换为大写)之类的东西,在将其小写输入后完成工作即可。 - Jeff B
以下是一个使用 xsetxdotool可能的解决方案,如果您正在运行 X 的桌面系统。但是,我认为当我们通过 SSH 访问远程机器时,它将无法工作? - M Imam Pratama
显示剩余3条评论
1个回答

7

像所有其他应用程序一样,Vim / GVIM 位于终端 / 窗口管理器抽象之上,因此没有直接访问底层原始键盘功能的权限。因此,获取大写锁定信息将涉及混乱且特定于平台的黑客攻击。

相反,我建议您使用 Vim 功能在 Vim 中“模拟”大写锁定,因为这不会出现您提到的问题。请查看文章仅插入模式大写锁定,其中详细解释了这一点。


谢谢!那篇文章建议使用备用键映射(ctrl+^)来调用大写锁定仿真。有没有一种方法可以使用大写锁定键本身来实现这一点(而不是在操作系统级别上将其重新映射到另一个键,这可能会阻止它在其他应用程序中工作)? - Sam King
@Sam:在Windows上,你可以通过AutoHotkey脚本仅在Vim处于活动状态时选择性地重新映射大写锁定键。但是许多铁杆的Vim用户会认为这个键对于原始用途来说太有价值了,而将其映射到Ctrl或Esc(我选择后者)。Vim Tips Wiki上还有另一篇关于如何实现这一点的文章。 - Ingo Karkat
有道理--我以前用 AHK 做过类似的事情。你知不知道 Linux 上有类似的东西? - Sam King
在插入模式下,将Ctrl+^组合键更改为激活大写锁定是否可行?对我来说,“Shift+Shift”更有意义。 - asa
@AfonsoSchulzAlbrecht:你可以重新映射它::inoremap <F1> <C-^>。 "Shift + Shift"无法工作的原因与Caps Lock相同:它需要是Vim“看到”的东西,而仅有的修改键(Shift、Ctrl等)根本无法到达Vim。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接