Vim插入模式:明确的键绑定始终按预期工作?

时间:2012-02-01 14:46:01

标签: vim insert editor mode

背景

有时在vim中进行编辑时,可能会在用户不希望存在的文件中添加额外的字符,因为他在匆忙中处于“插入模式”并急于完成某些操作。

幸运的是,即使用户匆忙,按ESC几次总是足以让他们退出插入模式并进入正常模式,毫无意外。

问题:

是否有一个键绑定对插入模式的工作方式相同?按“i”可以进入插入模式,但是如果多次按下它,您将开始在文件中插入字母“i”。

目标:

目标是让一些键绑定回到插入模式,用户甚至可以在闭眼时多次按下,并且仍然不担心意外字符被放入文件中的“意外”。

3 个答案:

答案 0 :(得分:4)

<C-o>i应该做到这一点。 <C-o>让你暂时进入正常模式,但是对于只有一个命令,如果该命令是“转到插入模式”,那么你只需返回那里。


编辑:我现在可以重现您的错误消息,看起来最简单的事情就是:

:nmap <C-i> i
:imap <C-i> <C-o>i

如果不在插入模式下映射<C-i>,但仅在正常模式下映射,则反复点击<C-i>将是幂等的。

感谢Benoit提到<C-i>在插入模式下插入标签。

答案 1 :(得分:4)

您应该在不同的模式下执行不同的映射:

:inoremap <F1> <NOP>
:nnoremap <F1> i
:vnoremap <F1> <esc>i
:cnoremap <F1> <C-C>i
:onoremap <F1> <esc>i

然后点击F1将进入插入模式。

您还可以切换'insertmode'设置(:set insertmode):在此模式下,插入模式是默认模式(使用Escape切换到该模式,然后使用CTRL进入正常模式 - 升。

答案 2 :(得分:2)

bitmask给出的答案有效,但它显然有产生错误信息的副作用:

E37:自上次更改后没有写入(添加!覆盖)

除非您已将vimrc配置为关闭该消息。

但另一种似乎无法生成错误消息的替代方案:

CTRL-C i

这似乎适用于标准的vim。