假设我的5个打开的标签是:
file1 file2 file2 file2 file3
当重点放在任何file2
标签上时,我想快速关闭所有重复的file2
标签。
运行命令后的结果应为:
file1 file2 file3
当焦点位于file1
或file3
时,该命令不会产生任何影响,因为这些选项没有重复的标签。
有关如何实现这一目标的任何想法?
编辑 - 基于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
答案 0 :(得分:1)
Vim中的每个打开文件都会获得一个唯一的缓冲区编号;您当前文件的一个(示例中为file2
)可以通过
:let bufnr = bufnr('')
然后,您可以检查其他标签页,并关闭任何具有相同编号的缓冲区。 :help tabpagebuflist()
举例说明了如何遍历所有标签页;只需修改它即可跳过当前(tabpagenr()
)。
要关闭缓冲区,首先需要导航到相应的标签页:
:execute 'tabnext' tabnr
如果您在标签页中只有一个窗口,则可以:close
。否则,您需要首先找到具有缓冲区的窗口,然后转到它:
:execute bufwinnr(bufnr) . 'wincmd w'
最好跟踪原始标签页编号,在删除之前的标签页时减少它,以便返回原始标签页。
答案 1 :(得分:1)