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

got*_*nes 55 vim

最近我发现我在Vim中"错误地使用了标签".我一直试图在Vim中使用缓冲区,因为通过MiniBufExplorer辅助,但我发现它很痛苦,因为从正常模式更改缓冲区需要多少次击键.使用选项卡,我可以在正常模式下执行gtgT在选项卡之间来回跳转,我也NUMBERgt可以转到特定选项卡.

使用缓冲区,我要么必须使用:bn,:bp或者使用MiniBufExplorer 进入命令模式,使用Ctrl + kCtrl + Up跳到缓冲区窗口,使用h和向左或向右滚动l然后点击Enter以选择我想要的缓冲区.或者我可以做一些涉及领导序列的事情,但它总是需要从主行中移除多个手指.那是一个真正的痛苦.

如何在正常模式下获得等效的切换标签,以便在正常模式下切换缓冲区,这样我可以做gn/ gpfor :bn/ :bpNUMBERgnfor :buf NUMBER

Eri*_*son 45

将其添加到.vimrc中

map gn :bn<cr>
map gp :bp<cr>
map gd :bd<cr>  
Run Code Online (Sandbox Code Playgroud)

需要注意的是重新映射gpgd,但也许你不关心这个(:help gp,:help gd).

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

顺便说一句,我个人用<leader>而不是g映射.我的目标<leader>;.这把我的<leader>钥匙放在主页上,这让我愿意用各种各样的东西来映射<leader>. :help mapleader如果你想改变你的<leader>钥匙.


Nic*_*son 42

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

你可以开始输入你需要的缓冲区文件名的任何部分,这很好.

不太经常,我实际上记得我想要的缓冲区的数量,我使用的东西像:b 3:3b.我看到你提到你不喜欢:buf 3,所以Rumple Stiltskin:3b可以选择你喜欢的款式.

  • 您甚至不必开始键入文件的任何部分,只需键入`:b <Tab>`(注意不要忘记添加空格),它将通过您打开的缓冲区开始循环.如果你甚至不记得文件名,这将很有帮助 (2认同)
  • 我发现在我的“wildmode”中包含“lastused”(我使用“set wildmenu wildmode=lastused:full”)非常方便,因为它按照最近使用的顺序循环匹配,从而可以轻松跳回到最近的缓冲区。 (2认同)

Rum*_*kin 31

`Ctrl- ^'切换到带编号的缓冲区.


Fri*_*ner 15

我在.vimrc中有以下几行:

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>
Run Code Online (Sandbox Code Playgroud)

现在使用Tab可以转到下一个缓冲区,并转到上一个Shift-Tab.

  • 非常好.轻松最好的解决方案.选项卡毕竟是一个导航键.标签的ctl-sh-tab和ctl-tab怎么样? (2认同)

icc*_*c97 15

这是基于Nick Knowlson的回答,但我想在那里扩展我的评论......

键入:b <Tab>(注意空格),然后使用Tab/ 循环打开缓冲区.

...让我们在我使用的所有其他编辑器和浏览器中更接近Ctrl+ Tab.

它实际上在某些方面甚至更好,然后你可以用/ 箭头向后和向前.它避免了拇指+手指fu键入Ctrl+ Shift+ Tab以向后浏览编辑器和浏览器中的选项卡.

NB Shift+ Tab就是这样Tab

这实际上类似于Windows 10中的Win+ Tab,一旦你第一次打开窗口,然后你可以使用箭头键移动.

编辑:我还有两个使用缓冲区的技巧:

  1. 这个回答我在我的.vimrc:

    nnoremap <leader>bb :buffers<cr>:b<space> 
    
    Run Code Online (Sandbox Code Playgroud)

    它会打开:ls/ :buffers命令并预先键入,:b这样您就必须输入缓冲区编号,因为您将看到包含所有缓冲区及其编号的列表.

  2. 我也有

    nnoremap <leader><tab> :b#<cr>
    
    Run Code Online (Sandbox Code Playgroud)

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


ske*_*ept 12

我使用插件unimpaired.vim

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

对于跳转到特定缓冲区,我知道的最佳选择是你提到的那个: :b<number>

如果你进入另一个缓冲区,你可以通过输入快速回来 <c-^>


Rob*_*ert 7

扩展Rumple Stiltskin的答案,例如,如果您知道要获取的文件位于缓冲区中4,则可以快速到达

4Ctrl-^
Run Code Online (Sandbox Code Playgroud)

在我的英国键盘上,我实际上可以做到4Ctrl-6,正如我所说的那样

:help CTRL-^
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以看到缓冲区编号

:buffers
Run Code Online (Sandbox Code Playgroud)


rom*_*inl 6

我使用LustyExplorer:我<leader>b打开一个缓冲区列表,然后打开我要打开的缓冲区名称中的几个字母enter.简单.

但是,您没有"错误地使用选项卡",您正在以您希望的方式使用选项卡.如果它对你有用,为什么要经历痛苦的​​学习"正确的方式"?


mvi*_*vic 6

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

map <F9> :bprevious<CR>
map <F10> :bnext<CR>
Run Code Online (Sandbox Code Playgroud)

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