如果我使用:

:tabedit file1 file2


我得到:

E172: Only one file name allowed


有没有办法将:tabedit与多个文件名?还是一次打开多个标签的另一种方法?

评论

相关:如何获取vim以超级用户SE一次将多个文件打开到选项卡中

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

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

我已经学会了这种单线::args * .c |全部选中。另一个问题比这更受欢迎,因此也最好将其链接。

相关:使用Stack Overflow的VIM在新选项卡中打开多个文件。

#1 楼

鉴于我通过修改参数列表使用“内置”方式在其他答案中遇到的问题和复杂性,我通过自己的小函数添加了此功能:

" 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等的命令。

评论


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

–tommcdo
2015年2月23日在2:17

为什么不在第一个for循环中使用l:p?如果没有l :,则glob(l:p,0,1)中c的行将出错。

– jdhao
20-10-21在12:16

如果我复制/粘贴,@ jdhao似乎可以按原样工作? l:是隐含的,因此无论有无,它都可以使用。

–马丁·图尔诺伊(Martin Tournoij)
20-10-21在13:09

@MartinTournoij我现在不能复制它。我正在使用Neovim。我认为我们应该使变量范围明确。

– jdhao
20-10-21在13:19

#2 楼

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

:args *.vim
:tab all


首先,:args将替换参数列表。参数列表列出了打开Vim时使用的文件。所以vim file1 file2意味着参数列表包含file1file2
我们可以在运行时进行修改,Vim会为参数列表中的每个新条目打开一个缓冲区。
有关详细信息,请参见:help argument-list。 />
:all命令为参数列表中的每个条目打开一个窗口,:tab命令执行一个命令,并在给定命令打开一个新窗口时打开一个新选项卡。

注意事项

此方法有一些注意事项。

首先,不检查重复项,因此对于相同的缓冲区,您可以得到2个或更多选项卡。

但是最大的问题是它用参数列表中的内容替换了所有选项卡;因此您将丢失所有现有的选项卡。
您可以通过使用:argadd *.vim将其添加到参数列表(而不是替换它)来略微规避此问题。但是诸如:edit:tabedit之类的命令不会更改参数列表,除非将这些选项卡添加到参数列表(尽管它们仍位于缓冲区列表中),否则您将丢失这些选项卡。您也可能不想在选项卡中打开参数列表中的所有内容,也许只是想打开2个文件作为其他选项卡。打开参数列表的选项卡(我无法真正开始工作),但这还远远不够。如果选项卡具有2个或更多窗口,它将仍然对其进行修改...

评论


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

–muru
15年2月22日在23:50

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

–tommcdo
2015年2月23日在2:24

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

–muru
2015年2月23日在10:41

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

–tommcdo
2015年2月23日在10:44

尽管有警告,但我还是喜欢argadd * |最好的选项卡,即使是在多个SE站点存在相同问题的情况下,也没有人惊讶地提到它。

–Big McLargeHuge
20-2-21在18:31

#3 楼

您可以改用:next命令,例如:

:n file1 file2


或:

:n *.txt


评论


这似乎与使用:args * .vim相同?至少,它的行为是相同的,并且:help next_f将其记录为相同的...

–马丁·图尔诺伊(Martin Tournoij)
2015年2月23日15:56

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

– Kenorb
2015年2月23日在15:57



#4 楼

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

vim file1 ... filen -p


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

:tab ball


顺便说一句,不要忘记变量tabpagemax(默认值10)会限制您可以通过这种方式打开的标签页数。

#5 楼

实际上,您可以打开新选项卡并保留当前选项卡而无需编写新功能(请参见“堆栈溢出”中的答案):

:tabe)之前,因为第一个文件将在当前选项卡中打开。另外,还会打开一个额外的空白标签(请参阅:help argdo了解原因)。

评论


您还需要修复语法突出显示(由于某种原因),如链接中所述,并关闭最后一个选项卡,因此'full'命令为::tabnew | args file1 file2 | argdo tabe |选项卡上的tabdo语法,您需要按Enter清除提示,然后键入:close以删除最后一个(空)选项卡...键入的内容非常多,并且仅当您打开很多选项卡时才值得(对于2或3个文件,只需两次使用:tabe会更快)。

–马丁·图尔诺伊(Martin Tournoij)
2015年3月26日在16:04