如何在vim中导航缓冲区?

17

我通常同时处理超过5个文件。 我使用缓冲区来打开不同的文件。 我使用诸如::buf file1,:buf file2等命令。 有没有更快的方法来移动到不同的文件?

5个回答

25

9
几个映射可以让你的生活更轻松。 下面这个会列出你的缓冲区并提示你输入编号:
nnoremap gb :buffers<CR>:buffer<Space>

gb

这个命令会将你的缓冲区列表显示在“wildmenu”中。它依赖于'wildcharm'选项以及'wildmenu''wildmode'选项。

nnoremap <leader>b :buffer <C-z>

<leader>b

这些命令允许你在不费力思考的情况下在所有缓冲区之间进行循环:

nnoremap <PageUp>   :bprevious<CR>
nnoremap <PageDown> :bnext<CR>

此外,不要忘记使用<C-^>,它可以让你在两个缓冲区之间切换。

4

以下是我.vimrc文件中的一些节选内容。它包括映射leader键、设置wilds tab自动完成,以及我的缓冲区导航键选择(大部分都受到互联网上的人们的启发,包括romainl在内)。编辑:然后我会闲扯一下关于窗口和标签页的快捷方式。

" easier default keys {{{1

let mapleader=','
nnoremap <leader>2 :@"<CR>

leader键是用户自定义快捷命令的前缀键(一些插件也使用它)。默认值为\,但许多人建议将其改为更容易触及的,

第二行是一个命令@,可以从"剪贴板中执行,以便您快速尝试各种键绑定(而不依赖于:so %)。 (我的记忆方法是Shift-2@。)

" wilds {{{1

set wildmenu wildmode=list:full
set wildcharm=<C-z>
set wildignore+=*~ wildignorecase

对于内置的补全功能,wildmenu 可能是在命令行上使用 tab 补全时在您的 Vim 上显示为黄色的部分。 wildmode 设置为逗号分隔的列表,每次在每个 tab 补全时按顺序出现(也就是说,我的列表只有一个元素,list:full)。list 显示候选项的行和列。full 的含义包括保持 wildmenu 的存在。wildcharm 是将 Tab 按键包含到宏中的方法。 *~ 用于我的 :edit:find 命令。

" nav keys {{{1
" windows, buffers and tabs {{{2
" buffers {{{3

nnoremap <leader>bb :b <C-z><S-Tab>
nnoremap <leader>bh :ls!<CR>:b<Space>
nnoremap <leader>bw :ls!<CR>:bw<Space>
nnoremap <leader>bt :TSelectBuffer<CR>
nnoremap <leader>be :BufExplorer<CR>
nnoremap <leader>bs :BufExplorerHorizontalSplit<CR>
nnoremap <leader>bv :BufExplorerVerticalSplit<CR>
nnoremap <leader>3 :e#<CR>
nmap <C-n> :bn<cr>
nmap <C-p> :bp<cr>
,3 是用于在“两个”最后缓冲区之间切换的(比内置的 Ctrl-6 更容易到达)。助记符是 Shift-3#,而 # 是最后一个缓冲区的寄存器符号(参见 :marks)。 ,bh 是选择隐藏缓冲区(!)。 ,bw 是按编号或名称删除缓冲区。例如,您可以在查看列表时删除多个缓冲区,使用 ,bw 1 3 4 8 10 <CR>。请注意,删除比 :bdelete 更具破坏性。它们各有优缺点。例如,:bdelete 会将缓冲区留在隐藏列表中,而 :bwipeout 则会删除全局标记(请参阅 :help marks,以及大写标记的说明)。
我还没有确定这些键绑定,我更愿意我的 ,bb 只是 ,b(仅定义而不定义其他内容会使 Vim 暂停,以查看您是否会输入更多内容)。
那些用于 :BufExplorer 的快捷方式实际上是该插件的默认设置,但我已经写出来了,这样如果我想开始使用 ,b 而没有卡顿,就可以更改它们。

您没有要求:

如果您仍然发现 Vim 缓冲区有点棘手,请尝试将功能与选项卡和窗口结合使用(直到您变得更加熟练为止?)。
" windows {{{3

" window nav
nnoremap <leader>w <C-w>
nnoremap <M-h> <C-w>h
nnoremap <M-j> <C-w>j
nnoremap <M-k> <C-w>k
nnoremap <M-l> <C-w>l
" resize window
nnoremap <C-h> <C-w><
nnoremap <C-j> <C-w>+
nnoremap <C-k> <C-w>-
nnoremap <C-l> <C-w>>

请注意,用,w作为前缀非常方便。此外,我保留Ctrl键用于调整大小,因为在所有环境中都很难实现Alt(M-),而且我没有更好的调整大小方式。使用,w切换窗口对我来说也没有问题。
" tabs {{{3

nnoremap <leader>t :tab
nnoremap <M-n> :tabn<cr>
nnoremap <M-p> :tabp<cr>
nnoremap <C-Tab> :tabn<cr>
nnoremap <C-S-Tab> :tabp<cr>
nnoremap tn :tabe<CR>
nnoremap te :tabe<Space><C-z><S-Tab>
nnoremap tf :tabf<Space>
nnoremap tc :tabc<CR>
nnoremap to :tabo<CR>
nnoremap tm :tabm<CR>
nnoremap ts :tabs<CR>

nnoremap th :tabr<CR>
nnoremap tj :tabn<CR>
nnoremap tk :tabp<CR>
nnoremap tl :tabl<CR>

" or, it may make more sense to use
" nnoremap th :tabp<CR>
" nnoremap tj :tabl<CR>
" nnoremap tk :tabr<CR>
" nnoremap tl :tabn<CR>

总结一下关于窗口和选项卡键的使用,我可以使用Alt来导航它们,这实际上非常容易到达。换句话说:

" (modifier) key choice explanation {{{3
"
"       KEYS        CTRL                  ALT            
"       hjkl        resize windows        switch windows        
"       np          switch buffer         switch tab      
"
" (resize windows is hard to do otherwise, so we use ctrl which works across
" more environments. i can use ',w' for windowcmds o.w.. alt is comfortable
" enough for fast and gui nav in tabs and windows. we use np for navs that 
" are more linear, hjkl for navs that are more planar.) 
"

这样,如果Alt键正常工作,你可以在标签页和窗口中按住它来快速查找“打开”的缓冲区。

1
一旦缓冲区已经打开,您只需输入:b partial_filename即可切换。
因此,如果:ls显示我的~./vimrc已经打开,那么我只需输入:b vimr:b rc即可切换到该缓冲区。

0

有很多解决方法。最好的是适合你的最好的方法。你有很多模糊匹配插件可以帮助你导航。我印象最深刻的两件事是:

1)CtrlP或Unite的模糊缓冲区搜索

2)LustyExplorer和/或LustyJuggler

还有最简单的:

:map <F5> :ls<CR>:e #    

按下 F5 可列出所有缓冲区,只需输入编号即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接