如何使用跳转列表每个文件跳一次?


6

在Vim中导航时,我经常会发现自己跳转到文件,跳转到该文件,然后跳到另一个文件,依此类推。最后,我想返回原始文件。使用<CTRL-O>完成工作,但需要比我想要的更多的印刷机。

我知道我可以预先设置一个标记,但我想要一个不需要任何前期思考的解决方案。

我正在寻找一种方法来浏览跳转列表,每个文件只停留一次。


我需要这个,因为当窗口的内容无意中被改变时,我不记得我之前有过哪个缓冲区,只是我希望它在那里。
Brady Trainor 2014年

Answers:


6

我的EnhancedJumps插件具有<C-o>/的映射变体,<C-i>以限制跳转到当前或不同的缓冲区。

<Leader><CTRL-O>, <Leader><CTRL-I> 在另一个缓冲区中转到[count]较旧/较新的光标位置。不考虑当前缓冲区内的跳转。用于在不经过所有本地位置的情况下调用先前访问过的缓冲区。无论跳转方向如何,当缓冲区中有多个后续跳转时,将使用缓冲区中的最后一个跳转位置。


完美,这正是我正在寻找的。谢谢。
保罗凯里2013年

1

我有完全相同的问题,发现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!的命令。


0

我不确定我是否帮助你。您希望在文件/缓冲区之间跳转,而不是跳转列表中的位置。(可能是同一档案中的多个职位)

然后你可以检查缓冲区相关的命令。例如

:ls        "list all buffers, Number, name
:b[N]      "switch to buffer N
:b <tab>   "after tab, buffer name auto-completion 

并且有许多插件可以帮助我们轻松切换缓冲区。


0

跳转列表的目的不是帮助你从缓冲区跳转到缓冲区:它记录你所做的所有跳跃运动。由于典型的vim使用包括缓冲区内和缓冲区之间的大量跳转,因此使用它在缓冲区之间导航将是错误的。

除非你从不使用跳跃运动,否则就是这样。但那将是一个更大的错误。

Vim有缓冲列表,顾名思义,它是一个包含所有缓冲区的列表,并带有一堆自己的导航命令。不幸的是,这个列表是“静态的”:您可以导航到列表中的前一个缓冲区,但不能导航到先前访问的缓冲区。Vim没有保留这样的清单。

我用名字浏览缓冲区。但是编写一个函数来编写跳转列表并导航到第一个不同的缓冲区可能是可行的。我现在不能在这款手机上做到这一点,但我认为这不会太难。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.