Як я можу запустити функцію чи макрос у папці файлів?


12

Скажімо, у мене функція, названа StripWhitespace.

Я можу запустити його в одному файлі, відкривши файл і запустивши :StripWhitespace.

Як я можу автоматично запустити цю функцію над папкою файлів і зберегти результати в процесі роботи?


3
Деталі, будь ласка!
200_успіх

Відповіді:


10

Ви можете використовувати -cаргумент для запуску команди при запуску з vim(1):

   -c {command}
               {command} will be executed after the first  file  has  been
               read.   {command}  is interpreted as an Ex command.  If the
               {command} contains spaces it must  be  enclosed  in  double
               quotes  (this depends on the shell that is used).  Example:
               Vim "+set si" main.c
               Note: You can use up to 10 "+" or "-c" commands.

Приклад:

vim -c ':call StripWhitespace()' file1 file2

Щоб вийти після цього, додайте | :wqa:

vim -c ':call StripWhitespace() | :wqa' file1 file2

1
Ви хочете: argdo, якщо запустити це для декількох файлів у командному рядку
Крістіан Брабандт

19

Якщо ви вже перебуваєте у Vim, ви можете використовувати команди :argdoабо :bufdoкоманди для виконання команди відповідно до кожного елемента зі списку аргументів або списку буфера відповідно.

наприклад, запустити :команду для кожного файла зі списку аргументів:

:argdo StripWhitespace

Або викликати функцію з кожного файлу у списку буферів:

:bufdo call StripWhitespace()

Або запустити макрос qу кожному файлі зі списку аргументів:

:argdo normal @q

Потім ви можете зберегти всі змінені буфери за допомогою :wall, або зберегти всі та закрити Vim за допомогою :wqall.

Якщо ви хочете записати файли, коли ви йдете разом, ви можете додати дзвінок до :update, наприклад:

:argdo s/foo/bar/ge | update

Існують різні способи отримання файлів у Vim, в першу чергу, включаючи:

  • Параметри подачі в командний рядок vim: vim *(це додає всі файли до списку аргументів),
  • :argsДля заповнення списку аргументів використовуйте команду (яка підтримує виразні символи та вирази backtick) або :argaddкоманду для додавання до неї файлів,
  • Просто відкрийте їх все вручну :e, :Exабо файл-відкриття плагіна.

1
Мені подобається ця відповідь, тому що вона не вимагає залишати Vim, який, на мій погляд, занадто дорогий (мій список дорогоцінних буферів!). У мене є деякі примітки: (1) залишити буфери без написання потрібно 'hidden'встановити; (2) : updateкоманда невелике поліпшення по порівнянні , :wоскільки він пише тільки якщо зміна була зроблена, так :bufdo updateчи :argdo updateзапише всі змінені буфери або аргументи.
tommcdo

Хороший момент update. Я думав згадати, hiddenколи писав відповідь, але вирішив проти, тому що не хотів надмірно ускладнювати її. Однак, поміркувавши, воно повинно бути там. Я оновлю відповідь, щоб тепер включити обидві пропозиції.
Багатий

@tommcdo Просто перевірив документацію на: wall, і він пише лише змінені буфери, тому: оновлення bufdo зрештою не потрібно.
Багатий

хороший вилов щодо того :wall, що також має перевагу не проїжджати по буферах і не віддалятися від того, звідки ви почали. Я припускаю, що :argdo updateце все-таки інша історія - можливо, ви не хочете писати в буфери, які відсутні у вашому списку аргументів.
tommcdo

@tommcdo Добре.
Багатий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.