Как запустить команду Vim из оболочки?


12

Это может быть глупый вопрос, но терпите меня.

Я автоматизирую некоторые из обычных вещей, которые я делаю при настройке новой рабочей среды, и хотел бы автоматизировать команду Vim :BundleInstall(для установки всех моих плагинов Vim).

Можно ли запустить это из оболочки?

В качестве альтернативы, можно ли запустить скрипт Vim, выполнить :BundleInstall, дождаться его завершения и выйти?

Благодарю.

Ответы:


14

Со vim(1)страницы руководства :

+ {Команда}

-c {команда}

{команда} будет выполнена после прочтения первого файла. {команда} интерпретируется как команда Ex. Если {команда} содержит пробелы, она должна быть заключена в двойные кавычки (это зависит от используемой оболочки). Пример: Vim "+ set si" main.c

Примечание. Вы можете использовать до 10 команд «+» или «-c».


3
Благодарность! Я знал, что чувствую себя глупым ...: / / Служит мне правильным, если я не прочитал man-страницу полностью. Я закончил тем, что использовал vim +BundleInstall +qall!.
Имирик

4

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

vim -E -c BundleInstall -c q

что позволит избежать открытия окна Vim в вашем терминале.

Примечание: мой первый ответ включал -sопцию, которая мне была нужна для другого приложения, но здесь она была неправильной, потому что она предотвращала большую часть инициализации Vim, включая поиск плагина, определяющего BundleInstallкоманду.


1
Спасибо, но по какой-то причине у меня это не сработает.
Имирик

1
Теперь я понимаю, почему. Я забыл, что -sэто больше, чем просто запрещает определенные сообщения - это также запрещает инициализации - поэтому определение BundleInstall не было получено. Один из способов исправить это было бы добавить опцию , как это до того , как первый -c: --cmd 'runtime plugin/bundle.vim'. Отредактируйте это имя файла, чтобы удовлетворить. См :help -s-ex.
Гариджон

2

Хотя приведенный выше специальный рецепт vim является правильным способом сделать это, вы всегда можете использовать более общий подход, такой как autoexpect .


0

В ситуациях, когда вам нужно, чтобы vim полностью загрузился, как если бы вы запустили его вручную, это работает:

vim -c "autocmd! CursorHold * <commands to run>"

Например, я хотел перенаправить вывод :mapв файл из оболочки, но я хотел захватить отображение, которое vim-Airlines создает только после того, как оно отображает свою табулированную строку (строка вверху, показывающая все открытые имена буферов). это асинхронно, простое выполнение -cперенаправления в файл не дает ему времени на сопоставления. Возможно, есть лучший способ, но это работает для меня, тем более, что я уже updatetimeустановил 100(0,1 секунды), который влияет на то, как долго будет происходить CursorHoldсобытие. По умолчанию vim устанавливает его на 4 секунды.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.