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

最近我发现我在Vim中“错误地使用了制表符” 。 我一直试图在Vim中使用缓冲区,因为通过MiniBufExplorer进行辅助,但是由于从正常模式改变缓冲区需要多less击键,我觉得很痛苦。 使用标签,我可以在普通模式下在标签之间来回切换,也可以使用NUMBER g t去特定标签。

使用缓冲区时,我必须使用:bn:bp或使用MiniBufExplorer进入命令模式,使用Ctrl + kCtrl + Up跳转到缓冲区窗口,用hl向左或向右滚动,然后按Enterselect我想要的缓冲区。 或者我可以做一些涉及领导序列的事情,但是总是需要从家乡行中移除多个手指。 这是一个真正的痛苦。

在正常模式下如何得到一些等效的切换标签来切换正常模式下的缓冲区,所以我可以像g n / g p那样:bn / :bpNUMBER g n :buf NUMBER

将其添加到.vimrc中

 map gn :bn<cr> map gp :bp<cr> map gd :bd<cr> 

请注意,您重新映射gpgd ,但也许你不关心( :help gp:help gd )。

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

顺便说一句,我个人使用<leader>而不是g在映射。 我的<leader>设置为; 。 这将我的<leader>键放在主排上,这使我愿意使用<leader>映射各种东西。 :help mapleader如果你想改变你的<leader>键,请:help mapleader

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

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

不太经常,我实际记得我想要的缓冲区的数量,我使用类似于:b 3:3b 。 我看你提到你不喜欢:buf 3虽然:buf 3 ,所以Rumple Stiltskin有一个替代:3b风格,你可能更喜欢。

`Ctrl- ^'切换到已编号的缓冲区。

我使用插件unimpaired.vim

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

为了跳转到一个特定的缓冲区,我知道的最好的select是你提到的那个:b<number>

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

我在.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> 

现在一个选项卡让你去到下一个缓冲区和Shift-Tab到前一个。

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

但是,您不是“错误地使用制表符”,您正在使用您想要的制表符。 如果它为你工作,为什么要通过学习你的方式去学习“正确的方式”的痛苦?

在Rumple Stiltskin的回答中,如果你知道你想要的文件在缓冲区4 ,例如,你可以快速到达

 4Ctrl-^ 

在我的英国键盘上,我实际上可以做4Ctrl-6

 :help CTRL-^ 

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

 :buffers 

我用F9和F10在这个映射的前一个/下一个缓冲区之间移动:

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

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

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


这是基于Nick Knowlson的回答 ,但我想扩大我的评论,使我们更接近我使用的所有其他编辑器和浏览器中的Ctrl + Tab

其实在某些方面甚至更好,然后你可以用 / 箭头来回转。 它避免了拇指和手指fu键入Ctrl + Shift + Tab以在编辑器和浏览器中的标签后退。

NB Shift + TabTab一样

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

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

 :Buffers 

打开所有打开的缓冲区列表,类似于:ls,但可以(模糊)search和select缓冲区。 在当前窗口中打开缓冲区是通过input,但也可以分别使用^ X ^ V或^ T在新的分割(h或v)或标签中打开。

值得注意的是:

 :Lines 

它允许search所有打开的缓冲区的内容。 如果你忘记了一个缓冲区的名字,但是你知道它应该包含什么,这可能会很方便。

我认为bufexplorer是一个不错的插件使用。 <leader>会popup一个交互式缓冲区资源pipe理器,列出所有打开的缓冲区。 您可以快速移动列表,并将您放入选定的缓冲区。 不像LustyExplorer它不依赖于ruby。