你更喜欢在Vim中的缓冲区之间切换?

时间:2008-11-29 10:24:28

标签: vim editor buffer

我已经尝试了MiniBufExplorer,但我通常会在几个窗口显示它或完全关闭它。我喜欢的是类似LustyJuggler的增量搜索,我在Emacs中的缓冲区之间切换的方式。肯定有这样的剧本吗?

15 个答案:

答案 0 :(得分:73)

我过去常常使用制表符和多个gvim实例的组合,在每个实例中将相关文件组保留为制表符。只要我在一个实例中没有太多选项卡,标签栏就会显示您正在编辑的每个文件的名称。

然后我读了Jamis Buck关于他如何切换from TextMate back to vim的帖子,并学到了一些很棒的技巧:

  • Ctrl-w s和Ctrl-w v以拆分当前窗口
  • Ctrl-6在同一窗口中的两个缓冲区之间来回切换。
  • 令人敬畏的fuzzyfinder.vim,可让您自动完成当前目录中文件的搜索或当前打开的缓冲区
  • Jamis自己的fuzzy_file_finderfuzzyfinder_textmate,它稍微修改了fuzzyfinder的工作方式,使其更像是TextMate中的类似功能(据我所知,不同之处在于它匹配任何地方文件名而不是仅从头开始)。观看this video以查看其实际效果。

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

更新2010/08/07

虽然如同Casey在评论中指出的那样,fuzzyfinder_textmate仍然很棒,但它已不再保留。此外,它(和/或fuzzyfinder.vim)在处理大型项目(大量目录或文件)时变得有点慢和不稳定,所以我一直在寻找替代方案。

幸运的是,Wincent ColaiutaCommand-T plugin似乎有一个非常好的选择。这与fuzzyfinder_textmate的行为非常相似(如果不是稍微好一些),但明显更快;它还具有很好的功能,如能够在拆分或垂直拆分中打开找到的文件。谢谢(并赞成!)给David Rivers指点。

答案 1 :(得分:33)

我使用基础知识 - “:ls”+“:bn”/“:bp”+“:b <part-of-name>

答案 2 :(得分:31)

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

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

不得不把手移到箭头键上很烦人。

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

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

在过去几年中,这些对我来说效果很好,尽管vim总是比你知道的更多秘密。

答案 3 :(得分:23)

我已经使用了Wincent Colaiuta的Command-T vim plugin几个月了。 Wincent在C中编写了需要快速的部分,我必须说它是!而且,我认为它的文件模式匹配逻辑甚至比Textmate的Command-T更好。查看screencast

  

VIM的Command-T插件提供   一种极其快速,直观的机制   用于打开最小的文件   击键次数。它被命名了   “Command-T”因为它受到了启发   绑定到“转到文件”窗口   TextMate中的Command-T。

     

通过键入选择文件   出现在路径中的字符,   并按算法排序   知道出现的字符   某些地点(例如,   路径分隔符后立即)   应该给予更多的重量。

Easier buffer switching包含许多有用的提示。我已经将以下内容改编为我的.vimrc,它执行缓冲区名称自动完成,将最有用的缓冲区切换命令映射到我的&lt; Leader&gt;和左侧主行键,并在状态行中显示当前缓冲区编号:

"" 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,它提供了每个列出的缓冲区在其自己的水平拆分顶部的紧凑列表。

答案 4 :(得分:18)

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

并且没有人提到过好的插件ctrlp.vim。使用此插件,您可以按名称搜索缓冲区。

答案 5 :(得分:14)

我用

下一个缓冲区的

CTRL - J

上一个缓冲区的

CTRL - K

下一个标签的

CTRL - L

上一个标签页的

CTRL - H

以下是.vimrc配置:

map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
map <C-L> :tabn<CR>
map <C-H> :tabp<CR>

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

答案 6 :(得分:5)

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>

答案 7 :(得分:5)

我最近变得更加简约了。

要循环缓冲区,我使用] b [b 来自未受损:https://github.com/tpope/vim-unimpaired

要直接跳到打开的缓冲区,只需使用Vim的选项卡完成:b 。一些字母足以通过一个或两个标签进入任何打开的缓冲区。

与开放缓冲区类似,我使用:e ,相对路径和标签完成。

我偶尔也会使用:ls 查看我打开的缓冲区(并检查其修改后的状态)。

为了摆脱缓冲区,我使用:bw 来擦除缓冲区。我通常会进行临时拆分并更改缓冲区以保留我的布局,因为:bw 也会关闭活动窗口。

我尝试过的所有迷你游戏都让我烦恼,我不想要一些智能匹配的东西为我打开随机文件。如果我真的需要浏览一些我使用的NERDtree(:e。)。

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

答案 8 :(得分:2)

优秀的Buffer Explorer,已经成为如此强大的肌肉记忆,我发现自己希望能在其他应用中使用它。当我主动编辑两个以上的文件时,我发现它非常快。

答案 9 :(得分:2)

我花了很长时间构建我的.vimrc来处理这个我已经使用了四年的HTML :: Mason项目,所以我有一个奇怪的标签组合和分割窗口。为了您的观看乐趣:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

答案 10 :(得分:2)

我使用tselectbuffer。它真的很快,不像bufexplorer不占用你的窗口空间。它还有一个增量搜索。我试过minibufexplorer,我发现缓冲区中的导航有点困难。

答案 11 :(得分:2)

我已将<S-J><S-K>映射到:bp:bn,但我承认我不使用它,因为文件数量大于10。然后将<C-J><C-K>映射到Gnome Terminal的上一个和下一个选项卡,我通常为我工作的4个不同项目中的每个项目运行4个vim实例。我仍然希望下一个和前一个缓冲区将转到我一直在处理的缓冲区的历史记录,而不是缓冲区列表中的顺序。

答案 12 :(得分:2)

我使用tselectbuffer。它非常快,不像bufexplorer在你的窗口占据空间。它还有一个增量搜索。我试过minibufexplorer,我发现缓冲区中的导航有点困难。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

  

:nnoremap(F5):buffers(CR):buffer(Space)

vim.wikia.com