これはばかげた質問かもしれませんが、我慢してください。
新しい作業環境をセットアップするときに行う通常の作業の一部を自動化しており、Vimコマンド:BundleInstall
(すべてのVimプラグインをインストールするため)を自動化したいと考えています。
これをシェルから実行することは可能ですか?
または、スクリプトでVimを実行し、:BundleInstall
を実行し、終了するまで待って終了することはできますか?
ありがとう。
vim(1)
のマニュアルページから:
+ {コマンド}
-c {コマンド}
{コマンド}は、最初のファイルが読み取られた後に実行されます。 {コマンド}はExコマンドとして解釈されます。 {コマンド}にスペースが含まれている場合は、二重引用符で囲む必要があります(これは使用するシェルによって異なります)。例:Vim "+ set si" main.c
注:最大10個の「+」または「-c」コマンドを使用できます。
次のようにコマンドを実行できます。
vim -E -c BundleInstall -c q
これにより、ターミナルでVimウィンドウが開かなくなります。
注:私の最初の答えには、別のアプリケーションに必要だった-s
オプションが含まれていましたが、BundleInstall
コマンドを定義するプラグインの調達を含むVimの初期化の多くが妨げられたため、ここでは正しくありませんでした。
上記のvim固有のレシピはそれを行う正しい方法ですが、 autoexpect のようなより一般的なアプローチをいつでも使用できます。
手動で開始したかのようにvimを完全にロードする必要がある状況では、これは機能します。
vim -c "autocmd! CursorHold * <commands to run>"
たとえば、:map
の出力をシェルからのファイルにリダイレクトしたかったのですが、 vim-airline がタブラインを表示した後にのみ作成するマッピングをキャプチャしたかったのです。 topは、開いているすべてのバッファ名を示しています。)これは非同期で行われるように見えるため、ファイルへの-c
リダイレクトを実行するだけでは、マッピングを行う時間がありませんでした。より良い方法があるかもしれませんが、これは私にとってはうまくいきます。特に、updatetime
が100
(0.1秒)に設定されているため、CursorHold
イベントが発生するまでの時間に影響します。 。デフォルトでは、vimはそれを4秒に設定します。
vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"