很容易转到当前缓冲区中的最后一个编辑位置。见How to go back to lines edited before the last one in Vim?更改列表是本地缓冲区,每个缓冲区都有自己的更改列表。但是,很常见的是,我从最近编辑过的缓冲区导航到另一个缓冲区,以某种方式返回到原始缓冲区中的最后一个编辑位置会很不错。有没有办法回到上一次插入或修改发生的地方?
您可以执行:windo normal
` 。
也就是说,我通常只使用C-o(反复)。
如果我“感觉到”我可能想回到某个点,我将直接点击mA
(它记录了一个跨文件/缓冲区标记),所以我可以做` A 从任何地方(甚至在重新启动编辑器之后)。
稍微偏离主题,我喜欢:Obsession
(蒂姆·波普(Tim Pope)撰写),因为它的寿命很长,并且会进行很多交叉引用导航。
您可以在vimrc中放入以下内容
autocmd InsertLeave * execute 'normal! mI'
并按`-I跳回到离开插入模式的位置。由于I
是大写字母,因此可以跨缓冲区工作。
附录(在评论后)
阅读完@Garbor Marton的评论后,
我自己写了一个函数
let g:small_register_state_pre = -1
function! DetectRegChangeAndUpdateMark()
let current_small_register = getreg('"-')
let current_mod_register = getreg('""')
if g:small_register_state_pre != current_small_register ||
\ g:small_register_state_pre != current_mod_register
normal! mM
let g:small_register_state_pre = current_small_register
endif
endfunction
" Mark I at the position where the last Insert mode occured
autocmd InsertLeave * execute 'normal! mI'
" Mark M for any modification happened in the Normal mode or Insert mode
autocmd CursorMoved * call DetectRegChangeAndUpdateMark()
autocmd InsertLeave * execute 'normal! mM'
[我喜欢使用原始的I
寄存器专门用于插入模式的更改,因此在这里我将M
寄存器用于包括r,x,d,y
和最后插入模式的任何修改。
尝试做ctrl-`(或ctrl-6)。