Как мне автоматизировать набор команд VIM, которые я использую все время?

1783
Joe

Я запускаю некоторые текстовые файлы, написанные в Markdown через Pandoc, чтобы получить html, но он странным образом отображает теги со странными переносами строк и пробелами в тегах, поэтому я выполнил несколько команд sed в VIM.

Должен ли я смотреть на Vimscripts или на макросы? Или сценарий (если я хочу объединить команды VIM с командой оболочки Pandoc)?

Я запускаю gVIM в Windows 7 и запускаю Pandoc через обычную оболочку Windows cmd, хотя обычно я делаю это изнутри VIM.

1
Почему бы не использовать sed для запуска команд sed? Ignacio Vazquez-Abrams 13 лет назад 0
Это то, что я делаю, но мне нужно запустить несколько из них, и я должен делать это каждый раз, когда я конвертирую файл. Я хотел бы иметь возможность автоматизировать преобразование + несколько команд sed одновременно, желательно из VIM. Joe 13 лет назад 0

2 ответа на вопрос

1
garyjohn

Я думаю, это зависит от того, где выполняется большая часть обработки файлов и принятия решений, а также от возможностей сценариев, доступных вам за пределами Vim. Поскольку большая часть обработки, которую вы выполняете, похоже, выполняется с помощью последовательности программ, возможно, в конвейере, я был бы склонен поместить все это в сценарий оболочки или командный файл и запустить его из Vim. (Вы писали, что используете sed. У вас также есть доступ к оболочке Unix?) Если у вас нет доступа к оболочке Unix и вы ограничены набором команд пакетного файла, тогда вы можете поместить все команды в функцию Vim. Помещение команд в функцию Vim дает вам немного больше гибкости и упрощает программирование, чем попытка процитировать все как раз для команды Vim или отображения.

Вы можете поместить команды оболочки в функции довольно легко, как это

function Foo() !echo "hello" endfunction 

или это:

function Bar() call system('echo "hello"') endfunction 

Увидеть

:help usr_41.txt 

и особенно

:help 41.6 :help 41.7 

так же как

:help system() 

подробнее об этом. Подробнее о командах и сопоставлениях см.

:help usr_40.txt 

Вы можете написать команду для вызова вашей функции следующим образом:

:command Foo call Foo() 

так что вы можете выполнить свою функцию с

:Foo 
0
glenn jackman

ed это довольно легко для сценария.

printf "%s\n" "%s/$/...end/" "g/delete.this.line/d" w q | ed filename 

Похожие вопросы