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


12

Це може бути тупим питанням, але потерпіть мене.

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

Чи можна запустити це з оболонки?

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

Спасибі.

Відповіді:


14

На vim(1)чоловіковій сторінці:

+ {команда}

-c {команда}

{command} буде виконано після того, як був прочитаний перший файл. {command} трактується як команда Ex. Якщо {command} містить пробіли, він повинен бути укладений у подвійні лапки (це залежить від оболонки, яка використовується). Приклад: Vim "+ set si" main.c

Примітка. Ви можете використовувати до 10 команд "+" або "-c".


3
Спасибі! Я знав, що почуваюсь німим ...: - / Служить мені правильно за те, що я не читав ретельно сторінки. Я закінчив використовувати 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.
garyjohn

2

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


0

У ситуаціях, коли потрібно, щоб vim повністю завантажився так, як якщо б ви його запустили вручну, це працює:

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

Наприклад, я хотів переспрямувати вихід :mapфайлу з оболонки, але хотів зафіксувати відображення, яке створює vim-airline, тільки після того, як воно відобразить його табличний рядок (рядок вгорі показує всі відкриті імена буферів). це асинхронно, просто запуск -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.