我通常同时处理超过5个文件。 我使用缓冲区来打开不同的文件。 我使用诸如::buf file1,:buf file2等命令。 有没有更快的方法来移动到不同的文件?
我通常同时处理超过5个文件。 我使用缓冲区来打开不同的文件。 我使用诸如::buf file1,:buf file2等命令。 有没有更快的方法来移动到不同的文件?
我使用的:
:b#
或 :bp
:bn
:b5
:buffers
或简写为::ls
并且请参考:he buffer
和Vim Wiki上的Easier Buffer Switching页面:http://vim.wikia.com/wiki/Easier_buffer_switching
SO上已经有了一个关于此问题的提问:How do you prefer to switch between buffers in Vim?
nnoremap gb :buffers<CR>:buffer<Space>
这个命令会将你的缓冲区列表显示在“wildmenu”中。它依赖于'wildcharm'
选项以及'wildmenu'
和'wildmode'
选项。
nnoremap <leader>b :buffer <C-z>
这些命令允许你在不费力思考的情况下在所有缓冲区之间进行循环:
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
<C-^>
,它可以让你在两个缓冲区之间切换。以下是我.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
而没有卡顿,就可以更改它们。
" 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.)
"
:b partial_filename
即可切换。:ls
显示我的~./vimrc
已经打开,那么我只需输入:b vimr
或:b rc
即可切换到该缓冲区。有很多解决方法。最好的是适合你的最好的方法。你有很多模糊匹配插件可以帮助你导航。我印象最深刻的两件事是:
1)CtrlP或Unite的模糊缓冲区搜索
2)LustyExplorer和/或LustyJuggler
还有最简单的:
:map <F5> :ls<CR>:e #