:tabedit file1 file2
我得到:
E172: Only one file name allowed
有没有办法将
:tabedit
与多个文件名?还是一次打开多个标签的另一种方法?#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)使用[
–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
意味着参数列表包含file1
和file2
。我们可以在运行时进行修改,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
评论
相关:如何获取vim以超级用户SE一次将多个文件打开到选项卡中@kenorb是的。除了没有解释它的作用之外,这里已经有了完全相同的答案。那么链接到它如何增加任何价值呢?
还有其他一些答案,并且可以在那里找到新的答案。其次,那里几乎没有其他类似的链接/相关链接,因此用户也可以从相关的链接中学到更多。
我已经学会了这种单线::args * .c |全部选中。另一个问题比这更受欢迎,因此也最好将其链接。
相关:使用Stack Overflow的VIM在新选项卡中打开多个文件。