如何一次打开多个标签?


14

如果我使用:

:tabedit file1 file2

我得到:

E172: Only one file name allowed

有什么办法可以使用:tabedit多个文件名?还是另一种同时打开多个标签的方式?



@kenorb是的。除了没有解释它的作用之外,这里已经有了完全相同的答案。那么链接到它如何增加任何价值呢?
马丁·图尔诺伊

还有其他一些答案,并且可以在那里找到新的答案。其次,那里几乎没有其他类似的链接/相关链接,因此用户也可以从相关链接中学到更多。
kenorb 2015年

我已经学会了这种单线::args *.c | tab all。另一个问题比这更受欢迎,因此也很好地链接它。
kenorb 2015年

Answers:


10

我的其他答案中,通过修改参数列表使用“内置”方式来解决问题和复杂性,我添加了自己的小函数来执行此操作:

" Open multiple tabs at once
fun! OpenMultipleTabs(pattern_list)
    for p in a:pattern_list
        for c in glob(l:p, 0, 1)
            execute 'tabedit ' . l:c
        endfor
    endfor
endfun

command! -bar -bang -nargs=+ -complete=file Tabedit call OpenMultipleTabs([<f-args>])

您现在可以使用:Tabedit *.vim。此功能将扩展所有的遍历模式,并对:tabedit <f>每个文件执行。您可以根据需要添加任意多个路径名,例如,所有这些都可以使用:

:Tabedit file.rb
:Tabedit *.c
:Tabedit file1.py file2.py _*.py
:Tabedit /etc/hosts file{1,2}.sh

好吧,依此类推...

我把这个有点globedit.vim插件,其中也包含命令:Edit:Split等等。


2
强大的功能和命令!进行了一些改进:(1)使用[<f-args>]而不是"<args>"-这样,该pattern参数将是一个List(数组),您将不必手动拆分字符串。(2)传递非零作为第三个参数,glob()以使其返回列表。然后,您也可以避免手动拆分。您需要通过0作为第二个参数来跳过它,而不会影响行为:glob(l:p, 0, 1)
tommcdo

7

据我所知,唯一的内置方法是:

:args *.vim
:tab all

首先,:args将替换参数列表。参数列表列出了打开Vim时使用的文件。因此,vim file1 file2意味着参数列表包含file1file2
我们可以在运行时修改它,Vim会为参数列表中的每个新条目打开一个缓冲区。
请参阅 :help argument-list以获取更多信息。

:all命令为参数列表中的每个条目打开一个窗口,该:tab命令执行一个命令,并在给定的命令打开一个新窗口时打开一个新选项卡。

注意事项

此方法有一些警告。

首先,不检查重复项,因此您可以在同一缓冲区中拥有2个或更多选项卡。

但是最大的问题是它将所有选项卡替换为参数列表中的选项卡。因此您丢失了所有现有标签。
您可以使用稍微避开这个:argadd *.vim补充而不是取代它的参数列表; 但命令,如:edit:tabedit根本改变参数列表,除非你将它们添加到参数列表,你会失去这些标签(你仍然有他们在缓冲区列表,虽然)。您可能也不想在选项卡的参数列表中打开所有内容,也许只是想打开2个文件作为其他选项卡。

您可能可以通过首先将所有当前打开的选项卡添加到参数列表中来使它稍微好一点(我真的无法使用),但这仍然远远不够。如果选项卡具有2个或更多窗口,它将仍然对其进行修改...


我可能是错的,但是这不会打开额外的标签页吗(如我在默认情况下打开标签页的问题所示)?
muru

1
如果您指的是我在该问题上的答案,则不同之处是使用了:argdo tabedit %,这将为每个参数打开一个新选项卡。从一个标签开始并打开n个新标签自然会让您留下n + 1个标签。:tab all是一个更好的解决方案。
tommcdo

@tommcdo我在谈论Josh Petrie的答案。您不会碰巧看到他的别名之一,对吗?:)
muru 2015年

哈哈,不。我一定在想一个不同的问题!
tommcdo 2015年

2

您可以改用:nextcommand,例如:

:n file1 file2

要么:

:n *.txt

这似乎与使用相同:args *.vim?至少,它的行为相同,并:help next_f记录为相同...
Martin Tournoij 2015年

它更短,更简单,您没有提到。行为与您在问题中所问的相同。
kenorb 2015年

2

在命令行中,您可以使用:

vim file1 ... filen -p

如果您忘记使用,-p仍然可以使用

:tab ball

顺便说一句,不要忘记该变量tabpagemax(默认值10)限制了您可以通过这种方式打开的选项卡的数量。


0

实际上,您可以打开新选项卡并保留当前选项卡,而无需编写新功能(请参见Stack Overflow上的以下答案):

:args file1 file2 | argdo tabe

您可能需要先打开一个新的空白标签(:tabe),因为第一个文件将在当前标签中打开。同样,一个额外的空选项卡将保持打开状态(请参阅:help argdo以了解原因)。


您还需要修复语法突出显示(由于某种原因),如链接中所述,并关闭最后一个标签,因此“完整”命令为::tabnew | args file1 file2 | argdo tabe | tabdo syntax on您需要按Enter清除提示,然后键入:close以删除最后一个(空)标签...这是一个非常繁琐的输入,只有在您打开许多标签时才值得(对于2或3个文件,只需使用:tabe两次会更快)。
Martin Tournoij 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.