从Vim递归打印所有文件

时间:2011-10-21 02:45:50

标签: vim

我目前正在使用MacVim,我想打印出工作树中的所有文件。有没有办法简单地这样做,也许使用hardcopy命令?

2 个答案:

答案 0 :(得分:6)

为一组文件执行命令的便捷方法是收集 他们的名字列表,将其定义为新的参数列表(参见:help arglist), 然后在参数列表中对这些文件进行迭代。

  1. 要执行第一步,请使用带有通配符的:args命令 匹配所需的文件。例如,

    :args ./**/*
    

    将参数列表设置为当前所有文件的名称 目录及其子目录;类似地,

    :args /tmp/**/*.{c,h}
    

    选择.c及其子目录中的所有.h/tmp个文件。对于 有关通配符语法的详细信息,请参阅:help wildcard

    如果包含要打印的文件的子树根的路径未知 事先并由脚本构建,使用命令

    :exe 'args' join(map(split(glob(p . '/**/*'), '\n'), 'fnameescape(v:val)'))
    

    其中变量p应包含其路径名 根目录。

  2. 要将参数列表中的文件发送到打印机,请执行 使用:hardcopy命令

    对这些文件执行:argdo命令
    :argdo hardcopy!
    

    !说明符禁止选择打印的模式对话框 参数。

    可以使用更复杂的命令将每个文件打印到 一个单独的PostScript文档,位于与该目录相同的目录中 文件。

    :argdo hardcopy! >%:p.ps
    

    此处打印文件的名称与.ps后缀连接在一起 获取相应PostScript文件的名称(请参阅:help cmdline-special)。

    为了加速:argdo - 参数命令,Vim忽略了 Syntax自动命令事件,将其添加到eventignore列表中。 这意味着如果没有为文件运行Syntax自动命令 在:hardcopy命令:argdo之前的参数列表中, 相应的打印文档没有语法高亮 (如果在syntax:y中设置printoptions)。执行Syntax 参数列表中所有文件的自动命令,请使用以下命令 先命令。

    :argdo set ei-=Syntax | do Syntax
    

    要在与打印相同的运行中执行此操作,请连接命令:

    :argdo set ei-=Syntax | do Syntax | hardcopy! >%:p.ps
    

答案 1 :(得分:3)

编辑抱歉,我之前误解了。

要打印所有内容,请说明工作目录中的php和C#文件:

:args ./*.{cs,php} **/*.{cs,php}
:argdo ha