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

问题描述 投票:5回答:3

很容易转到当前缓冲区中的最后一个编辑位置。见How to go back to lines edited before the last one in Vim?更改列表是本地缓冲区,每个缓冲区都有自己的更改列表。但是,很常见的是,我从最近编辑过的缓冲区导航到另一个缓冲区,以某种方式返回到原始缓冲区中的最后一个编辑位置会很不错。有没有办法回到上一次插入或修改发生的地方?

vim
3个回答
1
投票

您可以执行:windo normal `

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

如果我“感觉到”我可能想回到某个点,我将直接点击mA(它记录了一个跨文件/缓冲区标记),所以我可以做` A 从任何地方(甚至在重新启动编辑器之后)。


稍微偏离主题,我喜欢:Obsession(蒂姆·波普(Tim Pope)撰写),因为它的寿命很长,并且会进行很多交叉引用导航。


1
投票

您可以在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和最后插入模式的任何修改。


0
投票

尝试做ctrl-`(或ctrl-6)。

© www.soinside.com 2019 - 2024. All rights reserved.