我曾尝试过MiniBufExplorer,但通常会出现多个窗口显示或完全关闭。我想要的是像LustyJuggler这样带有增量搜索功能的脚本,可以像在Emacs中切换缓冲区那样。肯定有类似的脚本吧?
我曾尝试过MiniBufExplorer,但通常会出现多个窗口显示或完全关闭。我想要的是像LustyJuggler这样带有增量搜索功能的脚本,可以像在Emacs中切换缓冲区那样。肯定有类似的脚本吧?
我过去常用标签和多个gvim
实例的组合,将相关文件作为每个实例中的标签组。只要我不在一个实例中拥有太多标签,标签栏就可以一目了然地显示你正在编辑的每个文件的名称。
后来我读到了Jamis Buck的一篇文章,他从TextMate切换回vim,学到了一些很棒的技巧:
fuzzyfinder
的工作方式,以更像TextMate
中的类似功能(据我所知,区别在于它匹配文件名中的任何位置,而不仅仅是从开头)。观看this video以查看其操作。gvim
实例,并将其分割成多个窗口,以便可以同时查看多个文件。 我将Ctrl+F绑定到fuzzyfinder_textmate
,所以现在如果我键入(比如)Ctrl+Fmod/usob
,它会打开app/models/user_observer.rb
。 我几乎再也不使用标签了。
更新2010/08/07
虽然fuzzyfinder_textmate
仍然很棒,正如Casey在评论中指出的那样,它已经不再维护。 此外,当处理大型项目(许多目录或文件)时,它(和/或fuzzyfinder.vim
)会变得有点慢和不稳定,因此我一直在寻找替代方案。fuzzyfinder_textmate
,但明显更快; 它还具有一些不错的功能,例如能够在分割或垂直分割中打开找到的文件。 感谢David Rivers的指引(和投票!)。我使用基本功能 - ':ls
' + ':bn
'/':bp
' + ':b <part-of-name>
'
:map <c-n> :bn<cr>
和 :map <c-p> :bp<cr>
,因为 C-n
和 C-p
打起来很快,如果你重复按它们,可以在缓冲区之间循环。 (我从未使用过它们的原始目的。)就像使用 C-PgUp
和 C-PgDn
或浏览器的其他快捷键在选项卡之间循环一样。 - Tobia[b
表示上一个缓冲区,]b
表示下一个缓冲区,以及许多其他使用[
表示上一个和]
表示下一个概念的好东西。 - icc97我喜欢使用 "ctrl-w s" 和 "ctrl-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总是有比你所知道的更多的秘密。
:bp
,将<S-K>映射为:bn
。 - pukCommand-T插件为VIM提供了一种极快、直观的机制,可以用最少的按键打开文件。它被命名为"Command-T",因为它受到绑定在TextMate中的"前往文件"窗口的启发。
通过输入路径中出现的字符选择文件,并按照一种算法排序,该算法知道出现在某些位置(例如,在路径分隔符后面)的字符应该给予更高的权重。
更易于缓冲区切换包含许多有用的提示。我已经将以下内容调整到了我的.vimrc文件中,它可以自动完成缓冲区名称,将最有用的缓冲区切换命令映射到我的<Leader>和左侧Home Row键上,并在状态栏中显示当前缓冲区编号:
"" 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,它可以在顶部水平拆分窗口中提供每个列出的缓冲区的紧凑列表。
nmap <Leader>bb :ls<CR>:buffer<Space>
并且没有人提到过很好的插件ctrlp.vim。使用此插件,您可以通过名称搜索缓冲区。
我使用
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>
我最近变得更加简约。
我使用来自unimpaired的]b和[b循环缓冲区: https://github.com/tpope/vim-unimpaired
要直接跳转到打开的缓冲区,只需使用Vim的标签完成功能和:b。几个字母就足以用一个或两个标签到达任何打开的缓冲区。
类似于打开缓冲区,我使用具有相对路径和标签完成的:e。
我偶尔也会使用:ls查看我的打开缓冲区(并检查它们的修改状态)。
为了摆脱缓冲区,我使用:bw来清除缓冲区。我通常会创建一个临时分割窗口并更改缓冲区以保留我的布局,因为:bw也会关闭活动窗口。
我尝试过所有的minibuf,但最终都让我感到烦恼,而且我不希望一些智能匹配的东西为我打开随机文件。如果我真的需要浏览某些东西,我会使用NERDtree(:e .)。
我也不再使用Yankring(因为它会损坏xp),而是开始使用寄存器,最近我也认为f/t移动是最棒的...
<leader>ll
映射到 :ls
。另外,在你的 .vimrc
中确保有 set wildmenu
是非常有用的,因为这样你就可以得到一个小菜单,其中列出了所有 :b
的备选项。 - icc97imap <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>
:tab sball
,或者不使用:tabn
而改用:buffer
。 - perannoremap <Leader>l :ls<CR>:b<space>
切换缓冲区:
map <Leader>n :bn<CR>
map <Leader>p :bp<CR>