【问题标题】:How do I make vim open all files matching a pattern in different tabs?如何让 vim 打开与不同选项卡中的模式匹配的所有文件?
【发布时间】:2011-03-28 23:31:39
【问题描述】:

在给定的工作目录中,如果我这样做了

:tabe **/test*.py

vimE77: Too many file names 投诉。如果我希望它在单独的选项卡中打开每个匹配的文件怎么办?一定有办法,但我找不到。

【问题讨论】:

标签: vim vi


【解决方案1】:

您可以像这样使用args 列表和argdo

:args **/test*.py
:argdo tabe %

但是,argdo 关闭了语法事件(以加快正常用例),因此文件将首先在没有语法的情况下加载。您可以使用:syntax on 跟进它,以在所有加载的缓冲区上强制执行语法事件。压缩成一行(需要将argdo包裹在execute中,这样就不会吸收下面的|):

:args **/test*.py | execute 'argdo tabe %' | syntax on

或者,您可以通过以下方式从命令行打开 vim:

vim -p **/test*.py

但最多只能有 10 个标签。

【讨论】:

  • 非常感谢!现在,我怎样才能使模式成为参数,以便我可以将脚本映射到新命令并且我可以做到,例如:tabeall **/test*.py?
  • set tabpagemax=100 将允许 vim 打开 100 个标签。
  • 如下所述,@cooldoger 的回答更快、更短、更容易。我想这里的问题是“选项卡”和“缓冲区”之间的旧 vim 混淆(参见:stackoverflow.com/questions/26708822/…)。我认为打开 100 个选项卡没有什么用,最好使用缓冲区,并学习如何正确使用它们(例如:joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs
【解决方案2】:

映射它

nmap <c-d> :args **/*.tpl<bar>execute 'argdo tabe %'<bar>syntax on<cr>

但它仍然显示文件列表,您必须按几次回车(取决于文件数量)。

【讨论】:

  • nmap &lt;c-d&gt; :args **/*.tpl ^M argdo tabe % ^M syntax on ^M 使用 Control-Q 键入 ^M(文字换行符)字符。不过仍然显示文件列表。
【解决方案3】:

您可以使用以下内容:

:next **/test*.py

它会打开所有文件。

【讨论】:

  • 这不是正确的答案吗?简单多了!
  • 我同意这个答案更好、更简单、更快,但是当问题要求“不同的标签”时,我想接受的答案是好的。
  • 我不明白这是如何做到的。如果我尝试一下,只会打开一个缓冲区。
【解决方案4】:

此功能可以作为命令包含在您的 .vimrc 文件中:

"open all files in seperate tabs
command -nargs=1 OpenAll call <SID>openAll(<f-args>)
function! s:openAll(dir)
    execute 'args ' . a:dir
    silent argdo tabe %
    syntax on
endfunction

在 vim 中运行 :OpenAll **/*.py 这个函数会快速打开所有文件到新标签页

【讨论】:

    【解决方案5】:

    其他答案都不适合我,但这很好:

    find <path> -iname <pattrn> | xargs -o vim -p
    
    • 所有文件都在不同的选项卡中可见
    • 文件查找是递归的

    注意,vim 可以限制标签 - 由set tabpagemax=42 更改。

    另外,如果您想知道如何一次关闭所有选项卡,请使用 :qa

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2016-10-12
      • 2012-05-05
      相关资源
      最近更新 更多