Скажімо, у мене функція, названа StripWhitespace
.
Я можу запустити його в одному файлі, відкривши файл і запустивши :StripWhitespace
.
Як я можу автоматично запустити цю функцію над папкою файлів і зберегти результати в процесі роботи?
Скажімо, у мене функція, названа StripWhitespace
.
Я можу запустити його в одному файлі, відкривши файл і запустивши :StripWhitespace
.
Як я можу автоматично запустити цю функцію над папкою файлів і зберегти результати в процесі роботи?
Відповіді:
Ви можете використовувати -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
Якщо ви вже перебуваєте у Vim, ви можете використовувати команди :argdo
або :bufdo
команди для виконання команди відповідно до кожного елемента зі списку аргументів або списку буфера відповідно.
наприклад, запустити :
команду для кожного файла зі списку аргументів:
:argdo StripWhitespace
Або викликати функцію з кожного файлу у списку буферів:
:bufdo call StripWhitespace()
Або запустити макрос q
у кожному файлі зі списку аргументів:
:argdo normal @q
Потім ви можете зберегти всі змінені буфери за допомогою :wall
, або зберегти всі та закрити Vim за допомогою :wqall
.
Якщо ви хочете записати файли, коли ви йдете разом, ви можете додати дзвінок до :update
, наприклад:
:argdo s/foo/bar/ge | update
Існують різні способи отримання файлів у Vim, в першу чергу, включаючи:
vim *
(це додає всі файли до списку аргументів),:args
Для заповнення списку аргументів використовуйте команду (яка підтримує виразні символи та вирази backtick) або :argadd
команду для додавання до неї файлів,:e
, :Ex
або файл-відкриття плагіна.'hidden'
встановити; (2) : update
команда невелике поліпшення по порівнянні , :w
оскільки він пише тільки якщо зміна була зроблена, так :bufdo update
чи :argdo update
запише всі змінені буфери або аргументи.
update
. Я думав згадати, hidden
коли писав відповідь, але вирішив проти, тому що не хотів надмірно ускладнювати її. Однак, поміркувавши, воно повинно бути там. Я оновлю відповідь, щоб тепер включити обидві пропозиції.
:wall
, що також має перевагу не проїжджати по буферах і не віддалятися від того, звідки ви почали. Я припускаю, що :argdo update
це все-таки інша історія - можливо, ви не хочете писати в буфери, які відсутні у вашому списку аргументів.