VIM, запустить команду на несколько файлов - PullRequest
17 голосов
/ 20 августа 2011

У меня есть куча файлов sass, и мой дизайнер использовал неправильный синтаксис. Я хотел :margin-top 1px, но он сделал margin-top: 1px

Так что я легко написал подкоманду:

:rubydo sub! /([\w-]+):/,':\1'

Так что это работает, исправляет все двоеточия и перемещает их в нужное мне место. У меня около 50 файлов sass в каталоге stylesheets. Как я могу запустить эту команду на всех моих файлах за один раз? Я не совсем уверен, как это сделать в vim. Может быть, что-то делать с grep? Я не могу сказать тебе.

Ответы [ 4 ]

25 голосов
/ 20 августа 2011

См. Это: http://vimdoc.sourceforge.net/htmldoc/editing.html#:argdo

Я изучил эту команду прямо сейчас, но помощь ясна.

Перейти к:

:args *.css
:argdo %s/\([[:alpha:]-]\+\):/:\1/ge | update
6 голосов
/ 20 августа 2011

Вот пример

:bufdo %s/oldStuff/newStuff/ge | update

просто измените свое регулярное выражение в соответствии со своими потребностями

5 голосов
/ 20 августа 2011

Я думаю, что лучший инструмент для этого случая - sed, потоковый редактор.

sed -i.old 's/:\([-a-z]*\)/\1:/' *.css

Это отредактирует все ваши .css файлы, оставив исходные с расширениями .old .

Набор регулярных выражений, используемых sed, немного отличается и в зависимости от вашей версии более или менее ограничен. Выражение, которое я использовал, по-видимому, отлично подходит для вашего случая - с помощью инструмента BSD.

2 голосов
/ 20 августа 2011

Пара шагов.

:vimgrep /^[^:]\w+/ %:p:h/*    " find all of the lines that don't start with a colon

Это поместит все совпадения в ваш список быстрых исправлений.

Затем макрос сделает то, что вы хотите.

qa
I:<esc>
f:x
:w|cn<enter>
q

Затем протестируйте этот макрос несколько раз (с помощью @a).Затем еще один макрос для запуска этого макроса снова и снова ...

qbq   " this clears out b before starting, very important!
qb@a@bq
@b    " watch in amazement.  :)
...