VIM:关闭当前文件中除I';我在吗?
如果我打开的5个选项卡是:VIM:关闭当前文件中除I';我在吗?,vim,Vim,如果我打开的5个选项卡是: file1 file2 file2 file2 file3 我想要一种快速的方法来关闭所有重复的file2选项卡,当焦点在任何file2选项卡上时 所以运行命令后的结果应该是: file1 file2 file3 当焦点位于file1或file3时,该命令不应产生任何效果,因为这些选项卡没有重复 关于如何实现这一点有什么想法吗 编辑-基于Ingo建议的解决方案: function! s:CloseDupTabs() let curBufnr = bufnr
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
Vim中每个打开的文件都会得到一个唯一的缓冲区编号;可以通过以下方式获得当前文件的文件(
file2
)
:let bufnr = bufnr('')
然后,您可以检查其他选项卡页,并关闭具有相同编号的任何缓冲区<代码>:help tabpagebuflist()有一个如何迭代所有选项卡页面的示例;只需修改它即可跳过当前(tabpagenr()
)一个
要关闭缓冲区,首先需要导航到相应的选项卡页面:
:execute 'tabnext' tabnr
如果选项卡中始终只有一个窗口,则可以将其关闭。否则,您需要首先找到具有缓冲区的窗口,然后转到该窗口:
:execute bufwinnr(bufnr) . 'wincmd w'
最好能跟踪原始选项卡页码,在删除之前的选项卡页时将其递减,以便返回到原始页。我使用它来实现这一点
使用您喜爱的软件包管理器安装后,只需执行以下操作:
:塔博斯Uniq
您可以添加您的解决方案作为答案,甚至可以接受它:-)可能重复的