回答:
これは通常、Vimが代替画面に切り替えてそこで機能するためです。終了すると、Vimは元に戻り、Vimセッションから何も表示されませんが、Vimを起動する前に実行されたコマンドの結果が表示されます。
この機能は(リンク)で説明されています:h xterm-screens
つまり、基本的にはそれを望まないので、それを無効にしたいのです。:set t_ti= t_te=
これを行うには、これを実行する端末コードを空に設定します。
すべてをまとめると、次のようにVimを起動したいと思うでしょう。
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'
'more'
オプションをリセットしているため、hit-enter-promptは表示されません。
less
ものです。あまりパイプに接続しないでくださいvim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less
。最初はレイアウトがおかしくなっているかもしれません(私の端末にあります)。
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'
「クイックフラッシュ」しかありません。コマンドはコード0で終了し、出力はありません。何か不足していますか?
クリスチャンブラバンドからの回答に感謝しますが、別の-cコマンドを使用してquitコマンドを区切ると、次のようになります。
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames' -c 'q!'
この方法を使用すると、さまざまなコマンドをつなぎ合わせて、最後の「q!」を使用できます。vimを終了します。
手動で開始した場合のように、vimを完全にロードする必要がある状況では、これは機能します。
vim -c "autocmd! CursorHold * <commands to run>"
たとえば、出力を:map
シェルからファイルにリダイレクトしたかったのですが、vim-airlineがタブライン(すべてのバッファー名が開いていることを示す最上部の行)が表示された後でのみ作成されるマッピングをキャプチャしたいと思いました。これは非同期で-c
、ファイルへのリダイレクトを実行するだけでは、マッピングを作成する時間を与えられませんでした。より良い方法があるかもしれませんが、これは私にとってはうまくいきます。特に、(0.1秒)にすでにupdatetime
設定しているため100
、CursorHold
イベントが発生するまでの時間に影響します。デフォルトでは、vimは4秒に設定します。
vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"