Скажімо, у мене функція, названа 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це все-таки інша історія - можливо, ви не хочете писати в буфери, які відсутні у вашому списку аргументів.