Рекурсивная печать всех файлов из Vim - PullRequest
6 голосов
/ 21 октября 2011

В настоящее время я использую MacVim и хочу распечатать все файлы в моем рабочем дереве.Есть ли способ просто сделать это, возможно, с помощью команды hardcopy?

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

Удобный способ выполнить команду для группы файлов - собрать список их имен, определить его как новый список аргументов (см. :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 -argument Vim игнорирует событие автокоманды Syntax, добавляя его в список eventignore.Это подразумевает, что если бы Syntax автокоманды не выполнялись для файла в списке аргументов до того, как команда :hardcopy будет :argdo ne, соответствующий печатный документ не будет иметь подсветку синтаксиса (в случае, если syntax:y установлено вprintoptions).Чтобы выполнить Syntax автокоманды для всех файлов в списке аргументов, сначала используйте следующую команду:

    :argdo set ei-=Syntax | do Syntax
    

    Чтобы сделать это в том же цикле, что и печать, объедините команды:

    :argdo set ei-=Syntax | do Syntax | hardcopy! >%:p.ps
    
3 голосов
/ 21 октября 2011

Редактировать Извините, я неправильно понял раньше.

Чтобы напечатать все, скажем, файлы php и C # в вашем рабочем каталоге:

:args ./*.{cs,php} **/*.{cs,php}
:argdo ha
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...