从Vim递归打印所有文件

Phi*_*ina 6 vim

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

ib.*_*ib. 6

为一组文件执行命令的便捷方法是收集其名称列表,将其定义为新参数列表(请参阅:help arglist参考资料),然后在参数列表中对这些文件进行迭代.

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

    :args ./**/*
    
    Run Code Online (Sandbox Code Playgroud)

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

    :args /tmp/**/*.{c,h}
    
    Run Code Online (Sandbox Code Playgroud)

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

    如果预先知道包含要打印的文件的子树的根的路径并且是由脚本构建的,请使用该命令

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

    其中变量p应包含该根目录的路径名.

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

    :argdo hardcopy!
    
    Run Code Online (Sandbox Code Playgroud)

    !说明符抑制选择打印参数的模态对话框.

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

    :argdo hardcopy! >%:p.ps
    
    Run Code Online (Sandbox Code Playgroud)

    这里打印文件的名称与.ps后缀连接,以获取相应PostScript文件的名称(请参阅参考资料:help cmdline-special).

    为了加速:argdo-argument命令,Vim Syntax通过将自动命令事件添加到eventignore列表中来忽略 它.这意味着如果Syntax:hardcopy命令为:argdone 之前没有为参数列表中的文件运行自动命令,则相应的打印文档将没有语法突出显示(如果syntax:y设置为printoptions).要Syntax 对参数列表中的所有文件执行自动命令,请首先使用以下命令.

    :argdo set ei-=Syntax | do Syntax
    
    Run Code Online (Sandbox Code Playgroud)

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

    :argdo set ei-=Syntax | do Syntax | hardcopy! >%:p.ps
    
    Run Code Online (Sandbox Code Playgroud)

  • @Phil:这是因为当运行传递给`:argdo`的命令时,`Syntax`自动命令被禁用.如果没有为参数列表中的文件触发`Syntax`自动命令事件(例如,由于它尚未显示,只是在参数列表中已经提到过),那么该文件没有语法高亮显示.要确保为参数列表中的所有文件启用语法突出显示,请使用更新的答案中添加的命令. (2认同)