我正在尝试理解vim中的多级撤销。我打开vim并输入:
1
2
3
4
5
6
7然后我输入:
:u 1我收到消息:
0 changes; before #1 22:53:11当我输入的时候:
:u 2我看到:
E830: Undo number 2 not found我的理解是,在编辑模式下输入的每个vi命令或字符都被视为“更改”,但很明显事实并非如此。
有经验丰富的vim专家可以澄清吗?
发布于 2018-02-15 08:07:32
您可以像这样修改撤消行为(在~/.vimrc中):
inoremap <BS> <c-g>u<BS>
inoremap <CR> <c-g>u<CR>
inoremap <del> <c-g>u<del>
inoremap <c-w> <c-g>u<c-w>有关更多信息,请参阅::h i_Ctrl-g_u并阅读vim wiki上的此链接。
如果你使用像我这样的补全插件,你必须做更多的事情。我使用的是deoplete,在这种情况下,我必须这样做:
" <CR>: close popup and save indent.
" Now each Enter creates a undo point ":h i_Ctrl-g_u"
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
return deoplete#mappings#smart_close_popup() . "\<C-g>u\<CR>"
endfunctionhttps://stackoverflow.com/questions/32240001
复制相似问题