VIM, запустить команду для нескольких файлов

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

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

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

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

Ответы

Ответ 2

Вот пример

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

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

Ответ 3

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

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

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

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

Ответ 4

Несколько шагов.

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

Это приведет к совпадению всех совпадений с вашим списком quickfix.

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

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

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

qbq   " this clears out b before starting, very important!
[email protected]@bq
@b    " watch in amazement.  :)