返回正常模式时,vim可以自动关闭Capslock吗?


13

几乎每次我输入大写字母之后,我都会忘记返回正常模式时关闭大写锁定。然后,我尝试移动光标,并最终加入了很多行和很多其他我不希望发生的事情。

当我按Escape键进入正常模式时,是否可以将vim配置为关闭大写锁定?

如果有特定于操作系统的解决方案,那么我对适用于Linux的解决方案感兴趣。


我对此的“解决方案”是将大写锁定重新映射为“无操作”(macos),因为我不使用它,除非有错误
localhostdotdev

Answers:


8

这个问题的回答表明可能性不大-Vim无权访问操作系统进行该调用。

但是,您可以尝试更改行为,从而不需要Caps Lock。这是一个流行的关键映射到CtrlEsc或者Meta

Vim的gU运算符可以大写选择或动作,因此也许您可以正常键入然后使用它。也相关:gu小写和~切换。

也有自动完成的方法,这可能会减少您输入的需要VERY_LONG_MACRO_NAMES



3

我找到了一种在正常模式下自动关闭大写锁定的方法(尽管仅在Linux中有效)。

用插件制作的解决方案没有考虑到您可以通过一种以上的方式(从插入到普通)进入普通模式,例如从命令模式进入普通模式。

实际上,没有自动命令事件会在进入普通模式时激活,因此我使用的事件是CursorHoldevent,该事件在您未以普通模式键入时会激活。

au CursorHold * call TurnOffCaps()
set updatetime=10

您将更新时间设置为一个很小的数字,因此它将始终处于激活状态,直到您有机会键入任何内容。

function TurnOffCaps()  
    let capsState = matchstr(system('xset -q'), '00: Caps Lock:\s\+\zs\(on\|off\)\ze')
    if capsState == 'on'
        silent! execute ':!xdotool key Caps_Lock'
    endif
endfunction

我认为这是对该问题的唯一真正答案。Vim需要致电操作系统以某种方式打开CapsLock。当然,具体操作取决于操作系统。
Octaviour's

2

另一种选择是将您重新映射CapsLockEsc。这是我已经使用了两年的映射:CapsLock位于主行上,因此如果您触摸输入,它真的很容易使用。它还可以促进Vim的正确使用,因为退出插入模式要容易得多(键比靠近Esc)。

重新映射很容易:Linux原生支持此功能,Mac OS X和Windows有一些小型应用程序可以完成此操作。某些昂贵的键盘甚至具有允许重新映射键的功能。


2

除了Avian Y答案,实际上还有一个自动命令可以激活离开插入模式:

au InsertLeave * call TurnOffCaps()

那也是我一直在寻找的东西...


1

在我的Apple机器上,我实际上是使用Karabiner实现了此功能的,该功能运行得相当不错。不幸的是10.12破坏了Karabiner,从那以后我再也没有尝试过实施它。

我使用过转义键或Enter键禁用了大写锁定(如果之前已启用)。

因此,当您在10.11或更低版本上使用macOS时,您当然可以做到这一点(尽管不要求我提供设置,但现在不再需要它们了)。

否则我会建议的gU。(即使我能理解您的不满,也无法使用您在其他任何文本编辑器中使用的相同方法)


0

在vim帮助手册中,有一个很好的映射,使所有单词在插入模式下都大写:

inoremap <c-h> <esc>gUiw`]a

它使用ctrl-h,通常只是一个退格克隆,因此使用此映射不会造成任何损失。

在正常模式下,大写锁定是一场噩梦!希望对您有所帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.