【问题标题】:switching between tabs in vim with vim-airline使用 vim-airline 在 vi​​m 中的选项卡之间切换
【发布时间】:2015-02-28 08:32:22
【问题描述】:

我正在使用vim-airline 插件,它工作得很好,但是,在选项卡之间切换的唯一方法是用户:bp or :bn,这是:bprevious or :bnext 的快捷方式。这样做的问题是,如果我在第一个选项卡上并且想要切换到最后一个选项卡,即第 10 个选项卡,那么我必须输入 :bn 十次才能到达那里。 我怎样才能直接切换?也许按下arrow keys会有好处。

【问题讨论】:

标签: vim plugins vim-plugin vim-airline


【解决方案1】:

您的问题是您安装了一个插件,旨在混淆 Vim 的常规命令和工作流,甚至不知道这些常规方式。你走的捷径把你带到了死胡同,所以你唯一合理的解决办法是回到主路并正确学习 Vim,而不需要辅助轮和拐杖。

所以……从您的问题来看,您似乎正在使用航空公司所谓的“智能标签”,它在假标签中显示您打开的 缓冲区

如果它是一个真正的 tabline,它们实际上就是 tab 页面,您可以使用它们自己的一组命令在它们之间移动。

但它们是缓冲区,是的,您应该使用以下命令在它们之间移动:

:bnext
:bprevious
:bfirst
:blast
:b10
:b <buffer-name>

当然,为了您的方便,所有这些都可以映射。

但是……那个插件不显示缓冲区编号,所以你不能使用:b10 可靠地跳转到你的假“表格”中的第十个缓冲区,这样你的工具带中就少了一个工具。

还有一些特殊的缓冲区,比如 quickfix 列表,可以通过 :bn/:bn 来访问,而不会——可能——被列在你的假“tabline”中,这使得你的假“tabline”成为一个相当糟糕的抽象,甚至一般不考虑标签的明显限制。

当你实际使用标签页时,那个假的“tabline”会变成一个半真实的“tabline”。

将两个截然不同且以各自方式强大的概念混为一个混杂的概念并不是一个好主意。

我建议您禁用该选项并使用应使用的缓冲区和标签页。

参考:

:help buffers
:help tab-page

【讨论】:

  • 感谢您的回答,但是在阅读 :help tab-page 之后,我找不到在页面之间切换的便捷方式。
  • 那是因为,多亏了那个插件作者对用户体验的奇怪想法,你混淆了标签页和缓冲区。如果使用缓冲区,请使用缓冲区命令(:help buffers);如果您使用标签页,请使用标签页命令 (:help tab-page)。
  • 在 vim 中,选项卡不是您从 sublimetext 或任何其他编辑器中知道的选项卡。简单地说:缓冲区=所有打开的文件。 tabs = 一定数量的缓冲区。
  • 如果您愿意调用 2 个命令,那么您可以使用 :bfirst 后跟 :10bn 可靠地跳转到航空公司的第十个缓冲区。
【解决方案2】:

同意@romainl,但您始终可以将您的 +tab 映射到 :bn 或 :bp 以方便您。

" Tab navigation like Firefox. nnoremap <C-S-tab> :bprevious<CR> nnoremap <C-tab> :bnext<CR>

【讨论】:

  • 这在文本模式 vim 中不起作用(例如,通过 SSH),因为无法映射 Ctrl-Tab。但是,它确实在 gVim 中工作。
【解决方案3】:

除了 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

【讨论】:

    【解决方案4】:

    如果你使用的是vim-airline,我强烈建议你使用AirlineSelectTab命令,你可以通过:help airline看到它,下面是配置。

      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
    

    【讨论】:

      【解决方案5】:

      如果您使用的是制表符而不是缓冲区

      " Tab navigation (works only in gvim, not in console)
      nnoremap <C-tab>   gt
      nnoremap <C-S-tab> gT
      

      【讨论】:

        【解决方案6】:

        我已将 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 插件。

        参考:Using vim tab pages

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 2016-04-22
          • 1970-01-01
          • 1970-01-01
          • 2016-03-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多