2011-10-21 77 views
6

我目前使用的是MacVim,我想打印出我的工作树中的所有文件。有没有办法简单地做到这一点,也许使用hardcopy命令?从Vim递归打印所有文件

+0

':qa'将关闭所有打开的文件...我不知道'了'可以修改? –

回答

6

一个方便的方式对一组文件执行一个命令是收集他们的名字 列表,把它定义为新参数列表(请参见:help arglist), ,然后遍历参数列表中的文件。

  1. 为了执行第一步骤中,使用:args命令与一个通配符 匹配期望的文件。例如,

    :args ./**/* 
    

    设置参数列表当前 目录及其子目录下的所有文件的名称;同样,

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

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

    如果路径包含文件以打印一子树的根是未知 预先并且由脚本构建,使用其中变量p应该包含 的路径名的命令

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

    根目录。

  2. 对于参数列表将文件发送到打印机,使用:argdo命令这些文件执行 :hardcopy命令,

    :argdo hardcopy! 
    

    !符抑制选择打印 参数模态对话框。

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

    :argdo hardcopy! >%:p.ps 
    

    这里的印刷文件的名称与.ps后缀 级联以获得相应的PostScript文件的名称(参见:help cmdline-special)。

    为加快:argdo -argument命令时,Vim通过将其添加到列表eventignore忽略 Syntax自动事件。 这意味着,如果Syntax自动命令没有被运行在:hardcopy命令之前的参数列表中的文件 是:argdo讷的 相应的打印文档不会有一个语法高亮显示 (在printoptionssyntax:y集的情况下)。要为参数列表中的所有文件执行Syntax 自动命令,请首先使用以下 命令。

    :argdo set ei-=Syntax | do Syntax 
    

    为此在相同的运行印花,拼接的命令:

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

像往常一样,更彻底 – sehe

+0

感谢您的答案家伙。这工作。 –

+0

@ib。跟进这个问题。当我使用这个命令时,我似乎无法使语法突出显示工作。从我所知道的情况来看,它是为第一个做的,但是它没有打印到PostScript中。想知道,为什么呢?我已经尝试过在我的vimrc中设置printoptions = syntax:y“',但似乎没有办法。 –

3

编辑对不起,我误会了。

要打印所有,说PHP和C#的文件在工作目录:

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

只需':args **/*。{cs,php}'就可以做到这一点,IIRC。 – fachexot