Answers:
我的EnhancedJumps插件具有<C-o>
/的映射变体,<C-i>
以限制跳转到当前或不同的缓冲区。
<Leader><CTRL-O>, <Leader><CTRL-I>
在另一个缓冲区中转到[count]较旧/较新的光标位置。不考虑当前缓冲区内的跳转。用于在不经过所有本地位置的情况下调用先前访问过的缓冲区。无论跳转方向如何,当缓冲区中有多个后续跳转时,将使用缓冲区中的最后一个跳转位置。
我有完全相同的问题,发现EnhancedJump插件非常大,需要更大的依赖性。我写了一个小函数来计算跳转到不同缓冲区的数量<C-O>
/ <C-I>
需要的数量。跳转列表保持干净,<leader><C-O>/<C-I>
以最小的方式映射它以满足我的需求。
<leader><C-O>
跳转到跳转列表中前一个缓冲区的最后一个跳转。<leader><C-I>
做同样的事情并移动到跳转列表中的下一个缓冲区。function! JumpToNextBufferInJumplist(dir) " 1=forward, -1=backward
let jl = getjumplist() | let jumplist = jl[0] | let curjump = jl[1]
let jumpcmdstr = a:dir > 0 ? '<C-O>' : '<C-I>'
let jumpcmdchr = a:dir > 0 ? '^O' : '^I' " <C-I> or <C-O>
let searchrange = a:dir > 0 ? range(curjump+1,len(jumplist))
\ : range(curjump-1,0,-1)
for i in searchrange
if jumplist[i]["bufnr"] != bufnr('%')
let n = (i - curjump) * a:dir
echo "Executing ".jumpcmdstr." ".n." times."
execute "silent normal! ".n.jumpcmdchr
break
endif
endfor
endfunction
nnoremap <leader><C-O> :call JumpToNextBufferInJumplist(-1)<CR>
nnoremap <leader><C-I> :call JumpToNextBufferInJumplist( 1)<CR>
不要忘记用CTRL + v 替换真正的CTRL + o和CTRL + i字符^O
并^I
在第4行。我不知道为什么,但琴弦"<C-O>"
和"<C-I>"
执行时,没有工作normal!
的命令。
跳转列表的目的不是帮助你从缓冲区跳转到缓冲区:它记录你所做的所有跳跃运动。由于典型的vim使用包括缓冲区内和缓冲区之间的大量跳转,因此使用它在缓冲区之间导航将是错误的。
除非你从不使用跳跃运动,否则就是这样。但那将是一个更大的错误。
Vim有缓冲列表,顾名思义,它是一个包含所有缓冲区的列表,并带有一堆自己的导航命令。不幸的是,这个列表是“静态的”:您可以导航到列表中的前一个缓冲区,但不能导航到先前访问的缓冲区。Vim没有保留这样的清单。
我用名字浏览缓冲区。但是编写一个函数来编写跳转列表并导航到第一个不同的缓冲区可能是可行的。我现在不能在这款手机上做到这一点,但我认为这不会太难。