gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:05:06 25 4
gpt4 key购买 nike

假设我打开的 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

最佳答案

Vim 中每个打开的文件都有一个唯一的缓冲区编号;您当前文件的文件(在您的示例中为 file2)可以通过以下方式获得

:let bufnr = bufnr('')

然后您可以检查其他标签页,并关闭任何具有相同编号的缓冲区。 :help tabpagebuflist() 有一个如何遍历所有标签页的例子;只需修改它以跳过当前的 (tabpagenr())。

为了关闭缓冲区,您首先需要导航到相应的标签页:

:execute 'tabnext' tabnr

如果您总是在一个选项卡中只有一个窗口,那么您可以只:close 它。否则,您需要首先找到具有缓冲区的窗口,然后转到它:

:execute bufwinnr(bufnr) . 'wincmd w'

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

关于VIM:关闭当前文件的所有其他选项卡,除了我所在的选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49138875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com