在Vim正常模式下快速切换缓冲区


Quickly switching buffers in Vim normal mode

最近我发现我在vim中"错误地使用标签"。从那以后,我一直在尝试在VIM中使用缓冲区,通过MinibuFexplorer进行辅助,但我发现从正常模式更改缓冲区需要多少次按键,这很痛苦。有了标签,我可以只做gtgabdt在正常模式下在标签之间来回跳跃,我也可以做numbert转到特定的标签。

对于缓冲区,我要么使用:bn:bp进入命令模式,要么使用minibufexplorer,使用ctrl+kctrl+up跳到缓冲区窗口,使用hl向左或向右滚动,然后单击enter选择所需的缓冲区。或者我可以做一些涉及领导序列的事情,但它总是需要把多个手指从主行移开。那真是一种痛苦。

如何在正常模式下获得等效的切换选项卡以在正常模式下切换缓冲区,这样我就可以为:bn/:bp执行gabdxkbdxkbdbdbkbd,为:buf NUMBER执行xkbdxkbdxkbdxkbdxkbdxkbdxkbdbdnabd之类的操作?


把这个加到你的.vimrc里

1
2
3
map gn :bn<cr>
map gp :bp<cr>
map gd :bd<cr>

请注意,您正在重新映射gpgd,但可能您不在乎(:help gp:help gd)。

有关如何映射按键笔划的详细信息,请参见:help map-overview:help map.txt

顺便说一下,我个人在映射中使用,而不是g。我的设置为;。这使我的键位于主行,这使我愿意使用映射各种各样的东西。如果您想更改您的密钥,请选择:help mapleader


我通常在缓冲区之间切换的方式是使用带有内置自动完成功能的:buffer命令,例如:b prof切换到folder/path/LoginProfileFactory.php

您可以开始输入所需缓冲区文件名的任何部分,这很好。

更不常见的是,我实际上记得我想要的缓冲区的数量,我使用类似于:b 3:3b的东西。我看到你提到你不喜欢:buf 3,所以Rumple Stitskin有一个替代:3b的风格,你可能会喜欢。


` ctrl-^'切换到编号缓冲区。


我在.vimrc中有以下几行:

1
2
nnoremap  <silent>   <tab>  :if &modifiable && !&readonly && &modified <CR> :write<CR> :endif<CR>:bnext<CR>
nnoremap  <silent> <s-tab>  :if &modifiable && !&readonly && &modified <CR> :write<CR> :endif<CR>:bprevious<CR>

现在,一个选项卡允许您转到下一个缓冲区,一个移位选项卡允许您转到上一个缓冲区。


这是基于尼克诺尔森的回答,但我想扩大我在那里的评论…

Type :b (note the space), then cycle through the open buffers with Tab or / .

…这使我们更接近我使用的所有其他编辑器和浏览器中的ctrl+t

实际上,在某些方面甚至更好,然后您可以使用/箭头前后移动。它避免了拇指+手指fu来键入ctrl+shift+t来向后浏览编辑器和浏览器中的选项卡。

N.B.shift+tabbkbbkbd与tabbkbd的作用相同

这实际上类似于Windows10中的win+t,一旦您首先打开窗口,然后可以使用箭头键移动。

编辑:对于使用缓冲区,我还有另外两个技巧:

  • 根据这个答案,我把它放在我的电脑里了。

    1
    nnoremap <leader>bb :buffers<cr>:b<space>

    它打开:ls/:buffers命令,并预先键入:b,这样您只需键入缓冲区编号,就可以看到一个包含所有缓冲区及其编号的列表。

  • 我也有

    1
    nnoremap <leader><tab> :b#<cr>

    它在当前和最近使用的缓冲区之间切换,有点像在目录之间来回切换时执行cd -


  • 我使用插件unpaired.vim

    它定义映射[b]b,这些映射跳转到列表中的上一个和下一个缓冲区。

    对于跳到一个特定的缓冲区,我知道最好的选择就是你提到的那个::b

    如果进入另一个缓冲区,您可以通过键入快速返回。


    扩展Rumple Stitskin的答案,例如,如果您知道要访问的文件位于缓冲区4中,那么可以使用

    1
    4Ctrl-^

    在我的英国键盘上,我实际上可以执行4Ctrl-6,如中所述。

    1
    :help CTRL-^

    顺便说一下,您可以看到

    1
    :buffers

    我使用lustyexplorer:我点击b打开一个缓冲区列表,然后点击我要打开的缓冲区名称的几个字母,然后点击enter。容易的。

    但是,您并不是"不正确地使用标签",而是以您想要的方式使用标签。如果这对你有效,为什么要经历忘记学习"正确方法"的痛苦呢?


    vim是另一种使用模糊匹配快速更改缓冲区的方法。此插件附带默认命令:

    1
    :Buffers

    它打开所有打开的缓冲区的列表,类似于:ls,但是可以(模糊地)搜索和选择缓冲区。在当前窗口中打开缓冲区是通过Enter,但也可以分别使用^x^v或^t在新拆分(h或v)或选项卡中打开缓冲区。

    值得注意的是:

    1
    :Lines

    它允许搜索所有打开的缓冲区的内容。如果您忘记了缓冲区的名称,但知道它应该包含什么,那么这就很方便了。


    我使用F9和F10在具有此映射的上一个/下一个缓冲区之间移动:

    1
    2
    map <F9> :bprevious<CR>
    map <F10> :bnext<CR>

    对我来说,这是切换缓冲区的最快方式。


    我认为Bufexplorer是一个很好的插件。XKBD会显示一个交互式缓冲区资源管理器,列出所有打开的缓冲区。您可以在列表中快速移动,enter将您放入选定的缓冲区。与LustyExplorer不同,它不依赖于ruby。