我希望我的vim尽可能经常进入命令模式。我认为失去焦点是一个很好的事件,可以让它发生。我找到的所有内容都是为了在失去焦点时保存。
我希望在macvim中切换选项卡或使用cmd+tab切换到另一个应用程序时,它能自动返回到cmd模式。
au FocusLost,TabLeave * stopinsert
au FocusLost,TabLeave * call feedkeys("\<C-\>\<C-n>")
feedkeys()
至少需要Vim 7。不过这并不是什么大问题,因为Vim 7已经在2006年发布了。Ctrl-\_Ctrl-N
。我在我的vimrc中有stopinsert行,但总是被返回缓冲区时需要多按一个字符的事实所困扰... :wq - dash-tom-bang我本想添加一条评论,但是我无法格式化解决方案。
使用 feedkeys 的解决方案很好,只有一个小问题,即它始终返回正常模式,而不管您之前处于何种模式。 我不想取消命令行模式(用于在Windows中拖放文件),也不需要取消可视模式,我只想取消插入模式。
因此,解决方案如下:
autocmd FocusLost * call PopOutOfInsertMode()
function! PopOutOfInsertMode()
if v:insertmode
feedkeys("\<C-\>\<C-n>")
endif
endfunction
换句话说,只有在插入模式下才会弹出。这可以进一步细化,因为在“正常插入”中v:insertmode将是'i',在替换模式中将是'r',在虚拟替换模式中将是'v'。对于我来说,无论何时都弹出都是好的,但用户可能希望进行编辑以适应自己的需要。
如果在MacVim中无法正常工作,请用以下内容替换PopOutOfInsertMode
的内容:
if v:insertmode == 'i' | call feedkeys("\<C-\>\<C-n>") | endif
if v:insertmode == 'i' | call feedkeys("\<C-\>\<C-n>") | endif
对我来说似乎是有效的。 - Delameko