如何在 vim 中的所有缓冲区中转到最后的编辑位置



很容易转到当前缓冲区中的最后一个编辑位置。请参阅如何返回到 Vim 中最后一个行之前编辑的行?更改列表是本地缓冲区,每个缓冲区都有自己的更改列表。但是,我从最近编辑的缓冲区导航到另一个缓冲区是很常见的,以某种方式回到原始缓冲区中的最后一个编辑位置会很好。有没有办法回到上次插入或修改发生的地方?

您可以将以下内容放入您的 vimrc 中

autocmd InsertLeave * execute 'normal! mI'

,然后按 '-I 跳回到您离开插入模式的位置。由于I是大写的,因此它可以跨缓冲区工作。


增编(在评论之后)

在阅读了@Garbor马顿的评论后,

我自己写了一个函数

let g:detect_mod_reg_state = -1
function! DetectRegChangeAndUpdateMark()
    let current_small_register = getreg('"-')
    let current_mod_register = getreg('""')
    if g:detect_mod_reg_state != current_small_register || 
                 g:detect_mod_reg_state != current_mod_register
        normal! mM
        let g:detect_mod_reg_state = current_small_register
    endif
endfunction
" Mark I at the position where the last Insert mode occured across the buffer
autocmd InsertLeave * execute 'normal! mI'
" Mark M at the position when any modification happened in the Normal or Insert mode
autocmd CursorMoved * call DetectRegChangeAndUpdateMark()
autocmd InsertLeave * execute 'normal! mM'

我喜欢使用原始I寄存器专门用于插入模式更改,因此在这里我使用M寄存器进行任何修改,包括r,x,d,y和上次插入模式。

你可以做:windo normal'。

也就是说,我通常只使用C-o(重复)。

如果我"觉得"我可能想回到某个点,我只需点击mA(记录跨文件/缓冲区标记),这样我就可以从任何地方做'A(即使在重新启动编辑器之后)。


有点跑题,我喜欢:Obsession(蒂姆·波普的)真正长寿的会议,这些会议会做很多交叉引用导航。

尝试执行 ctrl-'(或 ctrl-6)。

最新更新