【问题标题】:Switch to last-active tab in VIM切换到 VIM 中的最后一个活动选项卡
【发布时间】:2010-01-22 19:08:16
【问题描述】:

在 Vim 中,有没有办法在当前选项卡和最后一个活动选项卡之间快速切换? '' 在当前行和最后一个活动行之间切换的方式排序。插件/键盘映射/巫毒都可以接受。

【问题讨论】:

    标签: vim tabs


    【解决方案1】:

    把它放在你的 .vimrc 中:

    if !exists('g:lasttab')
      let g:lasttab = 1
    endif
    nmap <Leader>tl :exe "tabn ".g:lasttab<CR>
    au TabLeave * let g:lasttab = tabpagenr()
    

    然后,在正常模式下,键入 \tl 以切换到您上次查看的标签。

    【讨论】:

    • 只有这个 gvim 吗?只有mac?我似乎无法让它在 mac 上的 iterm2 内工作(仅限终端 vim 模式)
    • 对于英国键盘布局,我发现这更有用nmap &lt;c-\&gt; :exe "tabn ".g:lasttab&lt;CR&gt; .. 谢谢@LucasOman
    • 我将它映射到 'tt' 但这就像一个魅力。冠军答案。
    • 我把它映射到t&lt;Tab&gt;,我喜欢它。
    • 您可以将其简化为键映射,没有额外功能:nmap &lt;c-t&gt;&lt;c-f&gt; :tabn&lt;space&gt;1&lt;cr&gt;nmap &lt;c-t&gt;&lt;c-z&gt; :tabn&lt;space&gt;1&lt;cr&gt;:tabp&lt;cr&gt;
    【解决方案2】:

    修复标签页关闭时的潜在问题:

    " Switch to last-active tab
    if !exists('g:Lasttab')
        let g:Lasttab = 1
        let g:Lasttab_backup = 1
    endif
    autocmd! TabLeave * let g:Lasttab_backup = g:Lasttab | let g:Lasttab = tabpagenr()
    autocmd! TabClosed * let g:Lasttab = g:Lasttab_backup
    nmap <silent> <Leader>` :exe "tabn " . g:Lasttab<cr>
    

    【讨论】:

      【解决方案3】:

      我使用缓冲区而不是选项卡,但我可以使用:b#在当前和最近使用的缓冲区之间切换
      使用缓冲区的基础是:

      :e filename to open file in new buffer  
      :bn to go to next buffer  
      :bp to go to previous buffer  
      :bd to close current buffer 
      

      【讨论】:

      • 我更喜欢选项卡而不是缓冲区的唯一原因是我可以重新排序选项卡以将文件分组在一起,并更轻松地在大型会话中查找内容。
      • AFAIK,您也可以使用 Ctrl-6(在 vimspeak 中我相信它被命名为“C-^”)而不是 :b#
      • &lt;c-^&gt; 或 ctrl shift 6 实际上会切换到最后一个缓冲区。如果您键入:ls 并且您至少打开了2 个缓冲区,那么您将看到名称左侧带有%(当前缓冲区)的缓冲区和名称左侧带有#(最后一个缓冲区)的另一个缓冲区。所以,&lt;c-^&gt; 有效地执行了:b#。事实上,如果你:echo @# 你会看到你之前访问过的缓冲区。此外,如果您let @#="foo.bar",它将修改&lt;c-^&gt; 的行为,因为该功能依赖于寄存器'# (@#)。我认为b # 的功能也会改变,但我不确定。
      • 还有一点需要注意:如果你:let @#="foo.bar",那么字符串"foo.bar"(忽略括号)必须只匹配你打开的缓冲区的路径和名称。例如,如果您键入:e styles//foo.css,那么您的缓冲区名称将为"styles//foo.css",但您不必将@# 寄存器与"styles//foo.css" 匹配(尽管这会起作用)。您只需要使用"styles/foo.css"。因此,我们可以看到缓冲区的名称不需要匹配;相反,只有前面的路径名(每个单独 - 就像拼接在“/”上一样)和文件名需要匹配。
      • 是的,通常人们使用缓冲区和标签;它们有不同的用途。这不是 OP 问题的答案
      【解决方案4】:

      我认为你需要的是命令:tablast

      【讨论】:

      • 他说的是最后一个活动标签而不是标签列表中的最后一个标签。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多