你如何在Vim中的缓冲区之间切换?

我试过MiniBufExplorer ,但是我通常最终会显示几个窗口,或者完全closures它。 我想要的是像增加search的LustyJuggler ,我在Emacs中的缓冲区之间切换的方式。 当然有这样的脚本?

现在我已经使用了Wincent Colaiuta的Command-T vim插件 。 Wincent写了C语言中需要快速的部分,我必须这么说! 而且,我认为它的文件模式匹配逻辑甚至比Textmate的Command-T更好。 看看截屏 。

VIM的Command-T插件提供了一个非常快速,直观的机制,以最less的击键次数打开文件。 它被命名为“Command-T”,因为它受到TextMate中绑定到Command-T的“Go to File”窗口的启发。

通过input出现在其path中的字符来select文件,并且通过知道出现在特定位置的字符(例如紧接在path分隔符之后)应该被赋予更多权重的algorithm来sorting文件。

更容易的缓冲切换包含许多有用的技巧。 我已经调整了以下内容到我的.vimrc中,它执行缓冲区名称自动完成,将最有用的缓冲区切换命令映射到我的<Leader>和左侧主行键,并在状态行中显示当前缓冲区号:

"" Tab triggers buffer-name auto-completion set wildchar=<Tab> wildmenu wildmode=full let mapleader = "," map <Leader>t :CommandT<Return> map <Leader>a :bprev<Return> map <Leader>s :bnext<Return> map <Leader>d :bd<Return> map <Leader>f :b "" Show the buffer number in the status line. set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P 

我也使用MiniBufExplorer ,它提供了每个列出的缓冲区在其自己的水平分割顶部的紧凑列表。

我曾经使用标签和多个gvim实例的组合,在每个实例中将相关文件组保存为选项卡。 只要在一个实例中没有太多标签,标签栏就会一目了然地显示您正在编辑的每个文件的名称。

然后,我读了Jamis Buck关于如何从TextMate切换回vim的文章 ,并学习了一些很棒的技巧:

  • Ctrl-w和Ctrl-w v分割当前窗口
  • Ctrl-6在同一窗口中的两个缓冲区之间来回切换。
  • 令人敬畏的fuzzyfinder.vim ,它使您可以自动完成当前目录中的文件search或当前打开的缓冲区
  • Jamis自己的fuzzy_file_finder和fuzzyfinder_textmate ,略微修改了模糊器的工作方式,使其更像TextMate中的一个类似的function(据我所知,区别在于它匹配文件名中的任何位置,而不是从头开始)。 观看这个video ,看看它在行动。

现在我只有一个gvim实例,最大化,并将其分成多个窗口,所以我可以同时看到多个文件。 我将Ctrl-F绑定到fuzzyfinder_textmate,所以现在如果input(比如说)Ctrl-F mod/usob它会打开app / models / user_observer.rb。 我几乎从不再打扰标签。

更新2010/08/07

虽然fuzzyfinder_textmate仍然很棒,正如凯西在评论中指出的那样,它不再被保留下来。 另外,它(和/或fuzzyfinder.vim)在处理大型项目(大量目录或文件)时会变得有点慢和不稳定,所以我一直在寻找替代scheme。

幸运的是, Wincent Colaiuta的Command-T插件似乎有一个很好的select。 这与fuzzyfinder_textmate的行为非常相似(如果不是更好的话),但明显更快; 它也有很好的function,如能够打开find的文件在拆分或垂直拆分。 感谢(和upvotes!)大卫河stream指向它。

我使用的基本知识 – ' :ls '+' :bn '/' :bp '+' :b <part-of-name> '

我喜欢“ctrl-w s”和“ctlr-w v”来分割窗口。 然后,我按住Ctrl键移动键(h,j,k,l),在分割窗口之间移动:

 " Map ctrl-movement keys to window switching map <Ck> <Cw><Up> map <Cj> <Cw><Down> map <Cl> <Cw><Right> map <Ch> <Cw><Left> 

不得不把我的手移到箭头键是烦人的。

接下来,我设置了ctlr-tab在当前窗口中的缓冲区之间切换(就像很多其他环境一样):

 " Switch to alternate file map <C-Tab> :bnext<cr> map <CS-Tab> :bprevious<cr> 

在过去的几年里,这些对我来说工作得非常好,尽pipevim总是有比你所知的更多的秘密。

 nmap <Leader>bb :ls<CR>:buffer<Space> 

没有人提到漂亮的插件ctrlp.vim 。 使用这个插件,你可以按名称search缓冲区。

我用

CTRLJ为下一个缓冲区

CTRLK为前一个缓冲区

CTRLL为下一个选项卡

CTRLH为上一个选项卡

这是.vimrcconfiguration:

 map <CJ> :bnext<CR> map <CK> :bprev<CR> map <CL> :tabn<CR> map <CH> :tabp<CR> 

请参阅http://syskall.com/my-biggest-vim-productivity-boost/

我最近变得更简约了。

循环缓冲区使用] b[b from unimpaired: https : //github.com/tpope/vim-unimpaired

要直接跳到一个打开的缓冲区,只需使用Vim的tab完成:b 。 几个字母就足以到达任何一个或两个打开的缓冲区。

与打开的缓冲区类似,我使用:e相对path和选项卡完成。

我也偶尔使用ls来查看我打开的缓冲区(并检查它们的修改状态)。

为了摆脱我使用的缓冲区:bw擦拭缓冲区。 我通常做一个临时拆分,并更改缓冲区来保存我的布局,因为:bw也closures了活动窗口。

所有我试过的小东西都会让我烦恼,而且我也不想要一些聪明的东西来打开随机文件。 如果我真的需要浏览我使用NERDtree( :e。 )的东西。

IDK,最近我也放弃了Yankring(因为它搞砸了XP ),并开始使用寄存器,最近我决定f / t的动作是有史以来最伟大的事情…

 imap <A-1> <Esc>:tabn 1<CR>i imap <A-2> <Esc>:tabn 2<CR>i imap <A-3> <Esc>:tabn 3<CR>i imap <A-4> <Esc>:tabn 4<CR>i imap <A-5> <Esc>:tabn 5<CR>i imap <A-6> <Esc>:tabn 6<CR>i imap <A-7> <Esc>:tabn 7<CR>i imap <A-8> <Esc>:tabn 8<CR>i imap <A-9> <Esc>:tabn 9<CR>i map <A-1> :tabn 1<CR> map <A-2> :tabn 2<CR> map <A-3> :tabn 3<CR> map <A-4> :tabn 4<CR> map <A-5> :tabn 5<CR> map <A-6> :tabn 6<CR> map <A-7> :tabn 7<CR> map <A-8> :tabn 8<CR> map <A-9> :tabn 9<CR> 

优秀的缓冲区资源pipe理器 ,已经变得如此强大的肌肉记忆,我发现自己希望我可以在其他应用程序中使用它。 主动编辑两个以上的文件时,我发现它非常快。

我花了很长一段时间build立我的.vimrc来处理这个HTML :: Mason项目已经四年了,所以我有一个奇怪的标签和拆分窗口的混合。 为了您的欣赏享受:

 map ;o :Sex <CR> map <CJ> <CW>j map <CK> <CW>k map <Cl> <CW>l map <Ch> <CW>h map ;] :tabnext<CR> map ;[ :tabprev<CR> map <Ct> :tabe +"browse ."<CR> map <CO> :NERDTreeToggle ~/curr/trunk/<CR> 

我使用tselectbuffer 。 这真的很快,不像bufexlorer不占用你的窗口的空间。 它也有一个增量search。我尝试了minibufexplorer,我发现缓冲区中的导航有点困难。

列出并在我使用的缓冲区之间切换:

 nnoremap <Leader>l :ls<CR>:b<space> 

要在缓冲区之间切换:

 map <Leader>n :bn<CR> map <Leader>p :bp<CR> 

我已经将<SJ><SK>映射到:bp:bn ,尽pipe我承认我不使用它,因为文件数量大于10.我已经将<CJ><CK>映射到Gnometerminal上一个和下一个选项卡,而且我通常为我工作的4个不同项目中的每一个运行4个vim实例。 我仍然真的希望下一个缓冲区和前一个缓冲区将转到我正在处理的缓冲区的历史logging,而不是缓冲区列表中的顺序。

我使用tselectbuffer。 这真的很快,不像bufexlorer不占用你的窗口的空间。 它也有一个增量search。我尝试了minibufexplorer,我发现缓冲区中的导航有点困难。

我使用简单的:^ w + w / ^ w + r的vsplit和:使用Ctrl + Alt + PgUp / PgDown组合键的tabnew。

当在Vim会话中有多个缓冲区打开时,可能难以跟踪缓冲区及其相应的缓冲区号。 如果是这种情况,使用简单的地图可以更轻松地切换到不同的文件:

:nnoremap(F5):缓冲区(CR):缓冲区(空间)

vim.wikia.com