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

是否可以将vim配置为在我关闭Capslock时按Escape键进入“正常”模式?

评论

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

#1 楼

对这个问题的回答表明,不太可能-Vim无权访问操作系统进行该调用。这是映射到Ctrl,Esc或Meta的常用键。也相关:gu表示小写字母,〜表示切换。

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

#2 楼

我已将capslock重新映射为ctrl,并且很少再使用capslock。但是,如果需要,对于vim,您可以将tpope / vim-capslock作为软件的临时大写锁定。如果使用此选项,则为事件InsertLeave设置autocmd并禁用capslock应该非常容易。

#3 楼

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

用插件制作的解决方案没有考虑到您可以在更多情况下进入正常模式。然后是一种方式(从插入到普通),例如从命令模式。

实际上没有进入进入普通模式的自动命令事件,因此我使用的事件是CursorHold事件,

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。当然,如何完成将取决于操作系统。

–职业
17年2月22日在16:00

#4 楼

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

#5 楼

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

重新映射很容易:Linux本身就支持这种情况,Mac OS X上有一些小应用和Windows完成此任务。一些昂贵的键盘甚至具有允许重新映射键的功能。

#6 楼

在我的Apple机器上,我实际上使用Karabiner实施了此功能,效果相当不错。不幸的是10.12破坏了Karabiner,从那时起我就再也没有尝试过实现它。

我已经做到了,所以可以使用转义键或Enter键禁用大写锁定(如果之前已启用)。

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

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

#7 楼

在vim帮助手册中,有一个非常不错的映射,可以使所有大写字母在插入模式下成为一个单词:因此,您
使用该映射并不会丢失任何内容。

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