シェルからVimコマンドを実行するには?


12

これは馬鹿げた質問かもしれませんが、私に耐えてください。

新しい作業環境をセットアップするときに行う通常の作業の一部を自動化しており、Vimコマンドを自動化したい:BundleInstall(すべてのVimプラグインをインストールするため)。

これをシェルから実行することは可能ですか?

あるいは、スクリプトでVimを実行し:BundleInstall、実行し、終了して終了するまで待機することは可能ですか?

ありがとう。

回答:


14

vim(1)manページから:

+ {コマンド}

-c {コマンド}

{command}は、最初のファイルが読み取られた後に実行されます。{command}はExコマンドとして解釈されます。{command}にスペースが含まれる場合は、二重引用符で囲む必要があります(使用するシェルによって異なります)。例:Vim "+ set si" main.c

注:最大10個の「+」または「-c」コマンドを使用できます。


3
ありがとう!私は馬鹿げていると思うことを知っていました...:-/マンページを完全に読んでいないために私を正しく提供します。最終的にはを使用しましたvim +BundleInstall +qall!
-imiric

4

次のようにコマンドを実行できます。

vim -E -c BundleInstall -c q

ターミナルでVimウィンドウを開かないようにします。

注:私の最初の答えには-s、別のアプリケーションに必要なオプションが含まれていましたが、BundleInstallコマンドを定義したプラグインのソースを含むVimの初期化の多くを妨げたため、ここでは間違っていました。


1
ありがとう、しかし、何らかの理由でそれは私のために動作しません。
-imiric

1
今、その理由がわかります。-s特定のメッセージを禁止するだけではなく、初期化も禁止することを忘れていたため、BundleInstallの定義が提供されていませんでした。それを修正する1つの方法は最初の前にこのようなオプションを追加するでしょう-c--cmd 'runtime plugin/bundle.vim'。そのファイル名に合わせて編集します。をご覧ください:help -s-ex
ゲイリージョン


0

手動で起動したかのようにvimを完全にロードする必要がある場合、これは機能します。

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

たとえば:map、シェルからの出力をファイルにリダイレクトしたいのですが、vim-airlineがタブライン(開いているすべてのバッファ名を表示する上部の行)を表示した後にのみ作成するマッピングをキャプチャしたかったのです。これは非同期で、単に-cファイルへのリダイレクトを実行するだけでは、マッピングを作成する時間は与えられませんでした。より良い方法があるかもしれませんが、これはうまくいきます。特に(0.1秒)に既にupdatetime設定されているため100CursorHoldイベントが発生するまでの時間に影響します。デフォルトでは、vimは4秒に設定します。

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.