我试过MiniBufExplorer,但我通常会看到几个窗口显示它或完全关闭它。我想要的是像LustyJuggler这样的增量搜索,我在 Emacs 中的缓冲区之间切换的方式。肯定有这样的剧本吗?
16 回答
我曾经使用选项卡和多个gvim
实例的组合,将相关文件组保留为每个实例中的选项卡。只要我没有在一个实例中出现太多选项卡,选项卡栏就会一目了然地显示您正在编辑的每个文件的名称。
然后我阅读了 Jamis Buck 的一篇关于他如何从 TextMate 切换回 vim的帖子,并学到了一些很棒的技巧:
- Ctrl+w s和Ctrl+w v分割当前窗口
- Ctrl+6在同一窗口中的两个缓冲区之间来回切换。
- 很棒的fuzzyfinder.vim,它可以自动完成搜索当前目录中的文件或当前打开的缓冲区
- Jamis 自己的blur_file_finder和blurfinder_textmate稍微修改了
fuzzyfinder
工作方式,使其表现得更像一个类似的功能TextMate
(据我所知,不同之处在于它匹配文件名中的任何位置,而不仅仅是从一开始)。观看此视频以了解它的实际效果。
现在我只有一个gvim
实例,将其最大化,然后将其拆分为多个窗口,这样我就可以一次查看多个文件。Ctrl我将+绑定F到fuzzyfinder\_textmate
,所以现在如果我输入 (say) Ctrl+F mod/usob
它会打开app/models/user\_observer.rb
。我几乎再也不用担心标签了。
更新 2010/08/07
fuzzyfinder\_textmate
正如凯西在评论中指出的那样,虽然仍然很棒,但它已不再维护。此外,它(和/或fuzzyfinder.vim
)在处理大型项目(大量目录或文件)时会变得有点慢和不稳定,所以我一直在寻找替代方案。
幸运的是, Wincent Colaiuta的Command-T 插件形式似乎有一个很好的替代方案。这与 具有非常相似(如果不是稍微好一点)的行为fuzzyfinder\_textmate
,但明显更快;它还具有很好的功能,例如能够以拆分或垂直拆分的方式打开找到的文件。感谢(和赞成!)大卫·里弗斯指出它。
我使用基础 - ' :ls
' + ' :bn
'/' :bp
' + ' :b <part-of-name>
'
我喜欢“ctrl-w s”和“ctlr-w v”来分割窗口。然后我映射移动键(h、j、k、l)并按住 ctrl 以在拆分窗口之间移动:
" 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 总是有比你知道的更多的秘密。
我已经使用 Wincent Colaiuta 的Command-T vim 插件几个月了。Wincent 用 C 写了它需要快速的部分,我必须说它是!而且,我认为它的文件模式匹配逻辑甚至比 Textmate 的 Command-T 还要好。查看截屏视频。
VIM 的 Command-T 插件提供了一种非常快速、直观的机制,可以用最少的按键次数打开文件。它被命名为“Command-T”,因为它的灵感来自于 TextMate 中绑定到 Command-T 的“转到文件”窗口。
文件是通过键入出现在其路径中的字符来选择的,并由一种算法排序,该算法知道出现在某些位置(例如,紧跟在路径分隔符之后)的字符应该被赋予更多的权重。
更轻松的缓冲区切换包含许多有用的提示。我已将以下内容应用于我的 .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,它在自己的水平拆分顶部提供每个列出的缓冲区的紧凑列表。
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>
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>
我最近变得更加简约。
要循环我使用的缓冲区]b和[b未受损的缓冲区:https ://github.com/tpope/vim-unimpaired
要直接跳转到打开的缓冲区,只需使用 Vim 的制表符补全:b。几个字母足以到达任何带有一两个制表符的打开缓冲区。
:e与我使用相对路径和制表符完成的打开缓冲区类似。
我:ls偶尔也会使用来查看我打开了哪些缓冲区(并检查它们的修改状态)。
为了摆脱我:bw用来擦除缓冲区的缓冲区。我通常会进行临时拆分并更改缓冲区以保留我的布局,因为它:bw也会关闭活动窗口。
我尝试过的所有 minibuf 东西最终都让我烦恼,我不希望一些智能匹配的东西为我打开随机文件。如果我真的需要浏览某些内容,我会使用 NERDtree ( :e .)。
IDK,最近我也放弃了 Yankring(因为它搞砸了xp)并开始使用寄存器,我最近决定f/t动作是有史以来最伟大的事情......
要列出并在我使用的缓冲区之间切换:
nnoremap <Leader>l :ls<CR>:b<space>
在缓冲区之间切换:
map <Leader>n :bn<CR>
map <Leader>p :bp<CR>
出色的Buffer Explorer已经变得如此强大的肌肉记忆力,以至于我发现自己希望可以在其他应用程序中使用它。当主动编辑两个以上的文件时,我发现它非常快。
我花了很长时间来构建我的 .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>
我使用tselectbuffer。它真的很快,不像 bufexplorer 不会在你的窗口中占用空间。它还有一个增量搜索。我尝试了 minibufexplorer,发现缓冲区中的导航有点困难。
我已经将 and 映射<S-J>
到<S-K>
and :bp
,:bn
尽管我承认我不使用它,因为文件数大于 10。然后我将<C-J>
and映射<C-K>
到 Gnome Terminal 的上一个和下一个选项卡,并且我通常为每个运行 4 个 vim 实例我从事的 4 个不同的项目。我仍然真的希望下一个和上一个缓冲区能够进入我一直在处理的缓冲区的历史记录,而不是缓冲区列表中的顺序。
我使用 tselectbuffer。它真的很快,不像 bufexplorer 不会在你的窗口中占用空间。它还有一个增量搜索。我尝试了 minibufexplorer,发现缓冲区中的导航有点困难。
我使用简单的 :vsplit 和 ^W+w/^W+r 和 :tabnew 和 Ctrl+Alt+PgUp/PgDown 组合键。
当 Vim 会话中打开了多个缓冲区时,可能很难跟踪缓冲区及其各自的缓冲区编号。如果是这种情况,使用简单的映射可以更轻松地切换到不同的文件:
:nnoremap (F5) :buffers(CR):buffer(空格)