【发布时间】:2008-11-29 10:24:28
【问题描述】:
我已经尝试过MiniBufExplorer,但我通常会看到几个窗口显示它或完全关闭它。我想要的是像 LustyJuggler 这样的增量搜索,我在 Emacs 中的缓冲区之间切换的方式。肯定有这样的脚本吗?
【问题讨论】:
我已经尝试过MiniBufExplorer,但我通常会看到几个窗口显示它或完全关闭它。我想要的是像 LustyJuggler 这样的增量搜索,我在 Emacs 中的缓冲区之间切换的方式。肯定有这样的脚本吗?
【问题讨论】:
我曾经使用选项卡和多个gvim 实例的组合,将相关文件组保留为每个实例中的选项卡。只要我没有在一个实例中出现太多选项卡,选项卡栏就会一目了然地显示您正在编辑的每个文件的名称。
然后我阅读了 Jamis Buck 关于他如何切换from TextMate back to vim 的帖子,并学到了一些很棒的技巧:
fuzzyfinder 的工作方式,使其更像TextMate 中的类似功能(据我所知,不同之处在于它匹配文件名,而不是从头开始)。观看 this video 以了解它的实际效果。现在我只有一个gvim 实例,已最大化,并将其拆分为多个窗口,以便我可以一次查看多个文件。我将 Ctrl+F 绑定到 fuzzyfinder\_textmate,所以现在如果我输入(比如说)Ctrl+F @ 987654335@ 它打开了app/models/user\_observer.rb。我几乎再也不用担心标签了。
2010/08/07 更新
虽然 fuzzyfinder\_textmate remains 很棒,正如 Casey 在 cmets 中指出的那样,但它已不再维护。此外,它(和/或fuzzyfinder.vim)在处理大型项目(大量目录或文件)时会变得有点慢和不稳定,所以我一直在寻找替代方案。
幸运的是,Wincent Colaiuta 的Command-T plugin 形式似乎有一个非常好的替代方案。这与fuzzyfinder\_textmate 的行为非常相似(如果不是稍微好一点的话),但明显更快;它还具有很好的功能,例如能够以拆分或垂直拆分的方式打开找到的文件。感谢(和赞成!)David Rivers 指出它。
【讨论】:
我已经使用 Wincent Colaiuta 的 Command-T vim plugin 几个月了。 Wincent 用 C 写了它需要快速的部分,我必须说它是!而且,我认为它的文件模式匹配逻辑甚至比 Textmate 的 Command-T 还要好。查看screencast。
VIM 的 Command-T 插件提供 一种极其快速、直观的机制 用最少的文件打开文件 击键次数。它被命名为 “Command-T”,因为它的灵感来自 “转到文件”窗口绑定到 TextMate 中的 Command-T。
通过键入选择文件 出现在其路径中的字符, 并由一个算法排序 知道出现在 某些位置(例如, 紧跟在路径分隔符之后) 应该给予更多的权重。
Easier buffer switching 包含许多有用的提示。我已将以下内容应用于我的 .vimrc,它执行缓冲区名称自动完成,将最有用的缓冲区切换命令映射到我的
"" 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,它在其自己的水平拆分顶部提供每个列出的缓冲区的紧凑列表。
【讨论】:
列出并在我使用的缓冲区之间切换:
nnoremap <Leader>l :ls<CR>:b<space>
在缓冲区之间切换:
map <Leader>n :bn<CR>
map <Leader>p :bp<CR>
【讨论】:
我用
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>
【讨论】:
我喜欢“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 总是有比你知道的更多的秘密。
【讨论】:
:bp 并将 :bnimap <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
while 循环和execute)以使其更简洁且更易于使用。nmap <Leader>bb :ls<CR>:buffer<Space>
没有人提到不错的插件ctrlp.vim。使用此插件,您可以按名称搜索缓冲区。
【讨论】:
我最近变得更简约了。
为了循环缓冲区,我使用 ]b 和 [b 来自 unimpaired:https://github.com/tpope/vim-unimpaired
要直接跳转到打开的缓冲区,只需使用 Vim 的制表符补全和 :b。几个字母足以到达任何带有一两个制表符的打开缓冲区。
类似于打开缓冲区,我使用 :e 与相对路径和制表符完成。
我偶尔也会使用 :ls 来查看我打开了哪些缓冲区(并检查它们的修改状态)。
为了摆脱缓冲区,我使用 :bw 来擦除缓冲区。我通常会临时拆分并更改缓冲区以保留我的布局,因为 :bw 也会关闭活动窗口。
我尝试过的所有 minibuf 东西都让我很烦,我不希望一些智能匹配的东西为我打开随机文件。如果我真的需要浏览某些内容,我会使用 NERDtree (:e .)。
IDK,最近我也放弃了 Yankring(因为它搞砸了 xp)并开始使用寄存器,最近我决定使用 f/t 运动是有史以来最伟大的事情......
【讨论】:
<leader>ll 映射到:ls。此外,确保您的 .vimrc 中有 set wildmenu 也非常有用,因为您会得到一个小菜单,其中包含 :b 的所有替代品
我已将<S-J> 和<S-K> 映射到:bp 和:bn,尽管我承认我不使用它,因为文件数大于10。然后我映射了<C-J> 和@ 987654326@ 到 Gnome 终端的上一个和下一个选项卡,我通常为我从事的 4 个不同项目中的每一个运行 4 个 vim 实例。我仍然真的希望下一个和上一个缓冲区能够转到我一直在处理的缓冲区的历史记录,而不是缓冲区列表中的顺序。
【讨论】:
我使用基础 - ':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 或浏览器具有的任何快捷方式。
[b 和下一个缓冲区的]b。加上大量其他使用 ] 的概念表示下一个和 [ 表示上一个的好东西。
优秀的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,发现缓冲区中的导航有点困难。
【讨论】:
,be、,bs、,bv,所以我将 TSelectBuffer 映射到了,bb。
我使用 tselectbuffer。它真的很快,不像 bufexplorer 不会在你的窗口中占用空间。它也有增量搜索。我尝试了 minibufexplorer,发现缓冲区中的导航有点困难。
【讨论】:
当 Vim 会话中打开了多个缓冲区时,可能很难跟踪缓冲区及其各自的缓冲区编号。如果是这种情况,使用简单的地图可以更轻松地切换到不同的文件:
:nnoremap (F5) :buffers(CR):buffer(空格)
【讨论】: