在使用 vim-airline 时如何在 Vim 中切换标签页?

13

我正在使用 vim-airline 插件,它的功能非常好。然而,切换选项卡的唯一方法是使用 :bp 或 :bn 快捷键,它们分别代表 :bprevious 或 :bnext。问题在于,如果我在第一个选项卡上,并且想要切换到最后一个选项卡,即第10个选项卡,则必须输入 :bn 十次才能到达这里。有什么直接切换的方法吗? 也许按下 箭头键 会更方便。


2
这个问题不应该属于vi.stackexchange.com吗? - legends2k
6个回答

14
您的问题是,您安装了一个旨在混淆Vim常规命令和工作流程的插件,而您甚至不知道这些常规方法。您采取的捷径导致您陷入了死胡同,因此您唯一合理的解决方案是回到主路并学习正确使用Vim,不需要任何训练轮和拐杖。
所以…从您的问题中,似乎您正在使用Airline所谓的“更智能的tabline”,它会在假的选项卡线中显示您打开的缓冲区。
如果这是一个真正的选项卡栏,它们实际上将是选项卡页,并且您将使用它们自己的命令在它们之间移动。
但它们是缓冲区,是的,您应该使用以下命令在它们之间移动:
:bnext
:bprevious
:bfirst
:blast
:b10
:b <buffer-name>

当然,这些都可以映射到你的方便之中。

但是...那个插件不显示缓冲区号码,所以你不能使用:b10可靠地跳转到你虚假的“标签行”中的第十个缓冲区,这就是你工具箱中少了一项工具。

而且一些特殊的缓冲区,比如快速修复列表,可以通过:bn/:bn来访问,而不会在你虚假的“标签行”中列出,因此即使不考虑选项卡的明显限制,你的虚假“标签行”也是一个相当差的抽象。

还有那个虚假“标签行”的特异性行为,当你实际使用选项卡页面时,它变成了一个半真实的“标签行”。

将两个非常不同的概念 —— 在各自的方式上都非常强大 —— 混为一谈,并不是一个好主意。

我建议你禁用该选项,按照它们预期的方式使用缓冲区和选项卡页面。

参考:

:help buffers
:help tab-page

1
谢谢您的回答,但是在阅读了:help tab-page之后,我没有找到方便切换页面的方法。 - Om3ga
2
这是因为,由于插件作者对用户体验的奇怪想法,你混淆了选项卡页和缓冲区。如果你使用缓冲区,请使用缓冲区命令(:help buffers);如果你使用选项卡页,请使用选项卡页命令(:help tab-page)。 - romainl
4
在vim中,选项卡并不像Sublime Text或其他编辑器中的选项卡那样。简单来说:缓冲区=所有打开的文件,选项卡=一定数量的缓冲区。 - ladislas
如果你愿意调用2个命令,那么你可以可靠地使用“:bfirst”后跟“:10bn”跳转到Airline中的第十个缓冲区。 - nonsensickle

8

同意@romainl的意见,但是你可以将+tab映射为:bn或:bp以简化操作。

" 类似于Firefox的标签导航。 nnoremap <C-S-tab> :bprevious<CR> nnoremap <C-tab> :bnext<CR>


2
这在文本模式Vim中不起作用(例如,通过SSH),因为无法映射Ctrl-Tab。 但是,在gVim中它确实可以起作用。 - Alex Quinn

5

除了Rafi的答案之外,将以下内容添加到您的.vimrc文件中即可直接访问缓冲区/航空标签。

nmap <leader>1 :bfirst<CR>
nmap <leader>2 :bfirst<CR>:bn<CR>
nmap <leader>3 :bfirst<CR>:2bn<CR>
nmap <leader>4 :bfirst<CR>:3bn<CR>
...

或者,你可以选择加倍使用航空公司

let g:airline#extensions#tabline#buffer_idx_mode = 1
nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2

5
如果你正在使用vim-airline,它会暴露出<Plug>AirlineSelectTab键,而将它们映射到方便的按键序列则由你自己决定。
  let g:airline#extensions#tabline#buffer_idx_mode = 1
  nmap <leader>1 <Plug>AirlineSelectTab1
  nmap <leader>2 <Plug>AirlineSelectTab2
  nmap <leader>3 <Plug>AirlineSelectTab3
  nmap <leader>4 <Plug>AirlineSelectTab4
  nmap <leader>5 <Plug>AirlineSelectTab5
  nmap <leader>6 <Plug>AirlineSelectTab6
  nmap <leader>7 <Plug>AirlineSelectTab7
  nmap <leader>8 <Plug>AirlineSelectTab8
  nmap <leader>9 <Plug>AirlineSelectTab9
  nmap <leader>0 <Plug>AirlineSelectTab0
  nmap <leader>- <Plug>AirlineSelectPrevTab
  nmap <leader>+ <Plug>AirlineSelectNextTab

关于映射,例如参见https://vim.fandom.com/wiki/Mapping_keys_in_Vim_-Tutorial(Part_1)

2
我已经配置了vim,可以使用Ctrl+箭头键在选项卡之间切换。 Ctrl+将切换到当前选项卡左侧的选项卡。 Ctrl+将切换到当前选项卡右侧的选项卡。 Ctrl+将切换到第一个选项卡。 Ctrl+将切换到最后一个选项卡。
要实现上述行为,请更新您的vimrc文件,并添加以下行:
nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>
nnoremap <C-Up> :tabfirst<CR>
nnoremap <C-Down> :tablast<CR>

这也适用于vim-airline插件。
参考: 使用vim标签页

1
如果您使用选项卡而不是缓冲区
" Tab navigation (works only in gvim, not in console)
nnoremap <C-tab>   gt
nnoremap <C-S-tab> gT

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