最近我发现我"using tabs incorrectly" in Vim。我一直试图在Vim中使用缓冲区,因为通过MiniBufExplorer辅助,但我发现它很痛苦,因为从正常模式更改缓冲区需要多少次击键。使用选项卡,我可以执行 g t 或 g T 在正常模式下在选项卡之间来回跳转,我也可以 NUMBER g t 转到特定的标签页。
使用缓冲区,我要么必须使用:bn
,:bp
或使用MiniBufExplorer进入命令模式,请使用 Ctrl + k 或 Ctrl + Up 跳到缓冲区窗口,用 h 和 l 向左或向右滚动,然后按 Enter 选择我想要的缓冲区。或者我可以做一些涉及领导序列的事情,但它总是需要从主行中移除多个手指。这真是一种痛苦。
如何在正常模式下获得等效切换标签以在正常模式下切换缓冲区,因此我可以执行类似 g n / g :bn
/ :bp
的kbd> p 和{{kbd> NUMBER g n 1}}?
答案 0 :(得分:41)
将此添加到.vimrc
map gn :bn<cr>
map gp :bp<cr>
map gd :bd<cr>
请注意,您正在重新映射gp
和gd
,但可能您并不关心(:help gp
,:help gd
)。
有关如何映射关键笔划的详细信息,请参阅:help map-overview
和:help map.txt
。
顺便说一下,我个人在映射中使用<leader>
而不是g
。我的<leader>
设置为;
。这会将我的<leader>
键放在主行上,这使我愿意使用<leader>
映射所有类型的内容。 :help mapleader
如果您想更改<leader>
密钥。
答案 1 :(得分:39)
我通常在缓冲区之间切换的方法是使用带有内置自动完成功能的:buffer
命令,例如:b prof<Tab>
切换为folder/path/LoginProfileFactory.php
。
你可以开始输入你需要的缓冲区文件名的任何部分,这很好。
不太常见,我实际上记得我想要的缓冲区数量,我使用:b 3
或:3b
之类的东西。
我看到你提到你不喜欢:buf 3
,所以Rumple Stiltskin可以替代你喜欢的:3b
风格。
答案 2 :(得分:30)
`Ctrl-^'切换到带编号的缓冲区。
答案 3 :(得分:14)
我在.vimrc中有以下几行:
nnoremap <silent> <tab> :if &modifiable && !&readonly && &modified <CR> :write<CR> :endif<CR>:bnext<CR>
nnoremap <silent> <s-tab> :if &modifiable && !&readonly && &modified <CR> :write<CR> :endif<CR>:bprevious<CR>
现在使用Tab键可以转到下一个缓冲区,并使用Shift-Tab转到上一个缓冲区。
答案 4 :(得分:13)
这是基于Nick Knowlson's answer,但我想在那里扩展我的评论......
键入
:b <Tab>
(注意空格),然后使用 Tab 或← / →循环打开缓冲区。
...让我们更接近我使用的所有其他编辑器和浏览器中的 Ctrl + Tab 。
实际上在某些方面甚至更好,然后你可以用← / →箭头前后移动。它避免了拇指+手指输入 Ctrl + Shift + Tab 以向后浏览编辑器和浏览器中的选项卡。
N.B。 Shift + Tab 与 Tab
相同这实际上类似于Windows 10中的 Win + Tab ,一旦你第一次打开窗口,你就可以使用箭头键移动。 / p>
编辑:我选择了两个使用缓冲区的技巧:
来自this answer我的.vimrc
:
nnoremap <leader>bb :buffers<cr>:b<space>
它会打开:ls
/ :buffers
命令并预先键入:b
,这样您就必须输入缓冲区编号,因为您将看到包含所有缓冲区的列表,他们的数字。
我也有
nnoremap <leader><tab> :b#<cr>
在当前和最近使用的缓冲区之间切换,有点像在目录之间来回切换时执行cd -
答案 5 :(得分:12)
我使用插件unimpaired.vim
它定义了跳转到列表中上一个和下一个缓冲区的映射[b
和]b
。
对于跳转到特定缓冲区,我知道的最佳选择是你提到的那个::b<number>
如果您进入另一个缓冲区,可以通过键入<c-^>
答案 6 :(得分:6)
我使用LustyExplorer:我点击<leader>b
打开一个缓冲区列表,然后打开我要打开的缓冲区名称中的几个字母enter
。容易。
但是,你不是“错误地使用标签”,你正在以你想要的方式使用标签。如果它对你有用,为什么要经历痛苦的学习“正确的方式”?
答案 7 :(得分:6)
扩展Rumple Stiltskin的答案,例如,如果您知道要访问的文件位于缓冲区4
中,则可以快速到达
4Ctrl-^
在我的英国键盘上,我实际上可以执行4Ctrl-6
,如
:help CTRL-^
顺便说一句,您可以使用
查看缓冲区编号:buffers
答案 8 :(得分:2)
我使用F9和F10在上一个/下一个缓冲区之间移动这个映射:
map <F9> :bprevious<CR>
map <F10> :bnext<CR>
对我来说,这是切换缓冲区的最快方法。
答案 9 :(得分:2)
fzf.vim是使用模糊匹配更改缓冲区的另一种快速方法。此插件附带默认命令:
:Buffers
打开所有打开缓冲区的列表,类似于:ls但可以(模糊)搜索和选择缓冲区。 在当前窗口中打开缓冲区是通过输入,但也可以分别使用^ X ^ V或^ T在新的拆分(h或v)或选项卡中打开。
值得注意的是:
:Lines
允许搜索所有打开缓冲区的内容。如果您忘记缓冲区的名称但是您知道它应该包含什么,这可能很方便。
答案 10 :(得分:2)
我让自己更轻松:
在.vimrc
中:
nnoremap <leader>bf :buffers<CR>:buffer "<- Last spaces is necessary
例如,在正常模式下,假设您的前导密钥为\
(默认值为),键入\bf
,那么您将获得一个已打开缓冲区的列表,键入所需的缓冲区数量并点击回车键。
注意:请记住,如果您在:D
根本没有必要。
像那样;;
更多细节:
<C-O>
向后导航
<C-I>
向前导航
因此,不需要额外的重新映射,否则您将重新映射它们。
答案 11 :(得分:1)
这是我的解决方案:
" `<leader><Tab>` - next buffer;
nnoremap <silent> <leader><Tab> :bnext<CR>
" `<leader><S-Tab>` - previous buffer;
nnoremap <silent> <leader><S-Tab> :bprevious<CR>
" `_bufferNumber_ + <Tab>` - go exact the buffer number;
nnoremap <silent> <Tab> <C-^>
顺便说一下,我使用了“buftabline”插件并设置了 let g:buftabline_numbers = 1
以将我的缓冲区分布在标签行上。
答案 12 :(得分:0)
我认为bufexplorer是一个很好用的插件。 <leader>
b e 会打开一个列出所有打开缓冲区的交互式缓冲区资源管理器。您可以快速浏览列表并按 Enter 将您置于选定的缓冲区中。与LustyExplorer
不同,它与ruby无关。