如何在vim中移动缓冲区?

时间:2014-07-23 05:43:47

标签: vim

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

5 个答案:

答案 0 :(得分:7)

我用的是什么:

  • 转到上一个缓冲区::b#:bp
  • 转到下一个缓冲区::bn
  • 如果您知道您的文件已加载到缓冲区5中::b5
  • 获取缓冲区列表::buffers或更短::ls

并简要介绍一下:he buffer

关于Vim Wiki上易于缓冲切换的wiki条目:http://vim.wikia.com/wiki/Easier_buffer_switching

SO已经有一个关于你的问题:How do you prefer to switch between buffers in Vim?

答案 1 :(得分:3)

一些映射可以让您的生活更轻松。

这个列出你的缓冲区并提示你输入一个数字:

nnoremap gb :buffers<CR>:buffer<Space>

gb

这个列出了&#34; wildmenu&#34;中的缓冲区。取决于'wildcharm'选项以及'wildmenu''wildmode'

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

<leader>b

这些允许您在不考虑的情况下在所有缓冲区之间循环:

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

另外,请不要忘记<C-^>,它允许您在两个缓冲区之间切换。

答案 2 :(得分:1)

缓冲区打开后,您只需键入:b partial_filename即可切换

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

答案 3 :(得分:1)

下面我将介绍一些.vimrc部分的摘录。它包括映射领导者密钥,设置wilds选项卡完成,最后我的缓冲区导航键选择(所有这些都主要受到interweb上人们的启发,包括romainl)。编辑:然后我逛逛我的窗口和标签的快捷方式。

" easier default keys {{{1

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

leader键是大多数用户定义的键命令的前缀键(某些插件也使用它)。默认值为\,但很多人建议更容易到达,

第二行是@"剪贴板执行命令,以防您想快速尝试各种键绑定(不依赖:so %)。 (我的nmeumonic是 Shift - 2 @ 。)

" wilds {{{1

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

对于内置完成,wildmenu可能是在命令行上使用制表符完成时在Vim上显示黄色的部分。 wildmode设置为以逗号分隔的列表,每个列表都依次出现在每个标签页上(也就是说,我的列表只是一个元素,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 更容易到达)。 Nmeuonic Shift - 3 #是最后一个缓冲区的寄存器符号。 (见:marks。)

,bh将从隐藏缓冲区(!)中进行选择。

,bwbwipeout缓冲区的编号或名称。例如,您可以在查看列表时使用,bw 1 3 4 8 10 <CR>删除多个。请注意,wipeout比: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密钥用于调整大小,因为AltM-)很难在所有环境中实现,而且我没有更好的方法来调整大小。我可以使用,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 正在工作,你可以在标签和窗口中快速找到“打开”缓冲区的同时按住它。

答案 4 :(得分:0)

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

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

2)LustyExplorer和/或LustyJuggler

最简单的:

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

F5 列出所有缓冲区,只输入类型编号。