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

时间:2011-04-05 21:55:32

标签: vim

最近我发现我"using tabs incorrectly" in Vim。我一直试图在Vim中使用缓冲区,因为通过MiniBufExplorer辅助,但我发现它很痛苦,因为从正常模式更改缓冲区需要多少次击键。使用选项卡,我可以执行 g t g T 在正常模式下在选项卡之间来回跳转,我也可以 NUMBER g t 转到特定的标签页。

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

如何在正常模式下获得等效切换标签以在正常模式下切换缓冲区,因此我可以执行类似 g n / g :bn / :bp的kbd> p 和{{kbd> NUMBER g n 1}}?

13 个答案:

答案 0 :(得分:41)

将此添加到.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>密钥。

答案 1 :(得分:39)

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

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

不太常见,我实际上记得我想要的缓冲区数量,我使用:b 3:3b之类的东西。 我看到你提到你不喜欢:buf 3,所以Rumple Stiltskin可以替代你喜欢的:3b风格。

答案 2 :(得分:30)

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

答案 3 :(得分:14)

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

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

答案 4 :(得分:13)

这是基于Nick Knowlson's answer,但我想在那里扩展我的评论......

  

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

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

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

N.B。 Shift + Tab Tab

相同

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

编辑:我选择了两个使用缓冲区的技巧:

  1. 来自this answer我的.vimrc

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

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

  2. 我也有

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

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

答案 5 :(得分:12)

我使用插件unimpaired.vim

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

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

如果您进入另一个缓冲区,可以通过键入<c-^>

快速返回

答案 6 :(得分:6)

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

但是,你不是“错误地使用标签”,你正在以你想要的方式使用标签。如果它对你有用,为什么要经历痛苦的​​学习“正确的方式”?

答案 7 :(得分:6)

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

4Ctrl-^

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

中所述
:help CTRL-^

顺便说一句,您可以使用

查看缓冲区编号
:buffers

答案 8 :(得分:2)

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

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

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

答案 9 :(得分:2)

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

:Buffers

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

值得注意的是:

:Lines

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

答案 10 :(得分:2)

我让自己更轻松: 在.vimrc中:

nnoremap <leader>bf :buffers<CR>:buffer "<- Last spaces is necessary

例如,在正常模式下,假设您的前导密钥为\(默认值为),键入\bf,那么您将获得一个已打开缓冲区的列表,键入所需的缓冲区数量并点击回车键。 注意:请记住,如果您在:D

之后键入,则最后一个空格 根本没有必要。

像那样;;

switching buffers in vim with above nnoremap

更多细节:

<C-O>向后导航

<C-I>向前导航

因此,不需要额外的重新映射,否则您将重新映射它们。

答案 11 :(得分:1)

这是我的解决方案:

" `<leader><Tab>` - next buffer;
nnoremap  <silent> <leader><Tab>    :bnext<CR> 

" `<leader><S-Tab>` - previous buffer;
nnoremap  <silent> <leader><S-Tab>  :bprevious<CR>

" `_bufferNumber_ + <Tab>` - go exact the buffer number;
nnoremap  <silent> <Tab>            <C-^>

顺便说一下,我使用了“buftabline”插件并设置了 let g:buftabline_numbers = 1 以将我的缓冲区分布在标签行上。

buftabline

答案 12 :(得分:0)

我认为bufexplorer是一个很好用的插件。 <leader> b e 会打开一个列出所有打开缓冲区的交互式缓冲区资源管理器。您可以快速浏览列表并按 Enter 将您置于选定的缓冲区中。与LustyExplorer不同,它与ruby无关。