【问题标题】:Undo Close Tab in Vim在 Vim 中撤消关闭选项卡
【发布时间】:2023-03-05 23:42:01
【问题描述】:

我在 vim 中关闭了一个选项卡,并立即意识到我需要重新打开它以执行某些操作。有没有办法在 Vim 7.2 中撤消关闭选项卡?

【问题讨论】:

标签: vim tabs


【解决方案1】:

您的文件可能仍在缓冲区中打开:

:ls " get the buffer number
:tabnew +Nbuf " where N is the buffer number

重新打开缓冲区 18,例如:

:tabnew +18buf

【讨论】:

  • :tabnew N 对我不起作用。我所做的是 :tabnew 然后 :bN 其中 N 是缓冲区号
  • @alfonso:命令是:tabnew +Nbuf,其中 N 是缓冲区号。它必须以 + 开头,并以单词“buf”作为后缀。
  • @greyfade 含义的示例:tabnew +18buf
  • 你甚至可以这样做 :vsp +[bufferNumber]buf 帮助我在我的 vim 中重新打开已关闭的拆分
  • 这不起作用的原因是因为+ 是行引用而不是缓冲区引用使用# 而不是+:tabe #5 在新选项卡中打开缓冲区5 .
【解决方案2】:
:tabnew#

在新标签页中重新打开最近关闭的文件


编辑:请使用 grayfade 的答案。我不喜欢我的答案,但我将其保留在这里以供参考和有用的评论信息。

【讨论】:

  • 很奇怪,一开始它似乎可以工作,现在它正在打开不相关的缓冲区。
  • # 是当前窗口中最后编辑的文件。关闭选项卡不会将该文件注册为备用文件 (#)。你必须通过缓冲区号(:ls)来查找它
  • 如果你是面向分裂的,它会更完美。
  • 错误提示:“E194: 没有替代文件名可以替代‘#’”
【解决方案3】:

我正在使用MRU (most recently used files) plugin。所以我可以编辑我刚刚编辑的最后 30 个文件

这里是 MRU 插件元数据:

File: mru.vim
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
Version: 3.2   Last Modified:
September 22, 2008

用法

要列出和编辑 MRU 列表中的文件,您可以使用“:MRU”命令。 ":MRU" 命令在一个临时的 Vim 窗口中显示 MRU 文件列表。如果 MRU 窗口已打开,然后窗口中显示 MRU 列表 被刷新。

【讨论】:

  • 能总结一下基本用法吗?
  • 这个答案我没看懂……这好像是在推荐使用插件?
  • @Carpetsmoker 是的,它是:mru.vim。
  • 如果您刚刚在选项卡中打开了 10 个文件,切换到中间文件之一然后将其关闭,那么这不是很有用,因为 MRU 将按照打开的顺序显示最后打开的 10 个文件当然你可以打开更多,然后迷路,需要自己比较
【解决方案4】:

简单的答案是否定的,没有内置的。

但一个可行的解决方案是使用像优秀的BufExplorer 这样的插件。由于它默认首先列出最近使用的缓冲区,因此重新打开关闭的选项卡就像按 \bet

一样简单

【讨论】:

  • 正如 Lucia 所说,您需要先使用<leader>be<Down>t 才能使用它。
【解决方案5】:

使用插件 Ben 建议:BufExplorer Github Mirror

在他的回答中,必须按<Leader>be<Down>t。添加一点快捷方式:

map <silent><leader>t <leader>be<Down>t

所以只需&lt;leader&gt;t 就可以完成这项工作。

【讨论】:

    【解决方案6】:

    如果有 BufferClose 事件,这将很容易...but it seems that it is not possible since it is not possible for window creation

    但对于选项卡,我们可以通过保持选项卡计数并计算TabLeaveTabEnter 之间的差异来检测选项卡是否已关闭。

    用法:&lt;leader&gt;tr 在新选项卡上重新打开最后关闭的选项卡(假设该选项卡只有一个缓冲区):

    let g:reopenbuf = expand('%:p')
    function! ReopenLastTabLeave()
      let g:lastbuf = expand('%:p')
      let g:lasttabcount = tabpagenr('$')
    endfunction
    function! ReopenLastTabEnter()
      if tabpagenr('$') < g:lasttabcount
        let g:reopenbuf = g:lastbuf
      endif
    endfunction
    function! ReopenLastTab()
      tabnew
      execute 'buffer' . g:reopenbuf
    endfunction
    augroup ReopenLastTab
      autocmd!
      autocmd TabLeave * call ReopenLastTabLeave()
      autocmd TabEnter * call ReopenLastTabEnter()
    augroup END
    " Tab Restore
    nnoremap <leader>tr :call ReopenLastTab()<CR>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-21
      • 1970-01-01
      • 2010-12-06
      • 2012-07-26
      • 2017-08-19
      • 1970-01-01
      相关资源
      最近更新 更多