VIM:关闭当前文件中除我所在的选项卡之外的所有其他选项卡?

3

假设我的5个打开的标签页是:

file1 file2 file2 file2 file3

当焦点在任何一个 file2 标签页上时,我希望有一种快速关闭所有重复的 file2 标签页的方法。

因此,在运行命令后,应该得到以下结果:

file1 file2 file3

命令在焦点位于file1file3时不应产生任何影响,因为它们没有重复的标签页。
你有什么想法可以实现这一点吗?
编辑 - 根据Ingo的建议解决方案:
function! s:CloseDupTabs()
    let curBufnr = bufnr('')
    let numTabs  = tabpagenr('$')

    " Run for 1 lesser than numTabs so that we don't visit current tab in loop
    for i in range(numTabs - 1)
        execute 'tabnext'

        if curBufnr == bufnr('')
            " Check edge case to see if we're already on last tab before doing tabprev
            if tabpagenr() != tabpagenr('$')
                close 
                execute 'tabprev'
            else
                close
            endif
        endif
    endfor

    execute 'tabnext'
endfunction

你可以将你的解决方案作为答案添加并接受它 :-) - Luc M
可能是 Vim:关闭除当前缓冲区之外的所有缓冲区 的重复问题。 - Martin Tournoij
2个回答

1
在Vim中,每个打开的文件都有一个唯一的缓冲区号码;你当前文件(例如你的file2)的缓冲区号码可以通过以下方式获取:
:let bufnr = bufnr('')

您可以检查其他选项卡页面,并关闭其中具有相同编号的任何缓冲区。 :help tabpagebuflist()有一个示例,说明如何迭代所有选项卡页面;只需修改以跳过当前(tabpagenr())即可。
为了关闭缓冲区,您首先需要导航到相应的选项卡页面:
:execute 'tabnext' tabnr

如果您在一个标签页中只有一个窗口,则可以使用:close命令来关闭它。否则,您需要先找到包含该缓冲区的窗口,然后切换到该窗口:
:execute bufwinnr(bufnr) . 'wincmd w'

当删除在当前标签页之前的标签页时,跟踪原始标签页号并将其递减,以便返回到原始标签页。


1

我使用 Tabops 来实现这个目标。

在使用你喜欢的包管理器安装后,只需执行以下操作:

:Tabops Uniq


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