1

興味深い方法でvimを自動化する方法は次のとおりです。

vim -c '0,$d | r source.txt | 1d | w | q' dest.txt

これはvimex コマンドを使用して、消去、バッファへのdest.txt読み込みsource.txt、最初の行の消去 (動作の仕方により空白行rになります)、ファイル (dest.txt) への書き込み、終了します。

これは (私が知る限り) vim ターミナル UI 全体の読み込みをスキップし、概念的には vimscript インタープリターを使用するのと少し似ています。

の機能を悪用するために、これをさらに一歩進めvimたいと思います: 開いているファイルの現在編集されている変更を (インタラクティブな自動化シェル スクリプトの一部として) スクリプトでピアリングする必要があります。 vim*.swpスワップファイルを変更し、vim のコマンドを使用して変更を適用recoverし、出力を取得します。

もちろん、実際のファイルを使用することは完全に有用です。たとえば、orig_file.txt は別の端末の vim で編集されています。私のスクリプトは、スワップファイルの変更が検出された各ポイントでこれを実行できます。

cp orig_file.txt orig_file_ephemeral.txt
cp .orig_file.txt.swp .orig_file.txt_ephemeral.txt.swp
vim -c 'recover | w | q'

この時点orig_file_ephemeral.txtで、編集が行われている他のプロセスからの vim バッファーのコンテンツが含まれます。このデータは、そのプロセスとの直接的な対話を必要とせずに取得されます。これはきちんとしています。

もちろん、実用的な目的のためには、おそらくそれを正確に行い、プライマリ vim をプロセスに参加させる方が理にかなっているでしょう。スクリプトの機能をvimの構成に分割することになりますが、これは欠点ですが、書き込みにすぐに利用できるバッファーの内容が既にあるため、概念的にも計算的にもより簡単であり、そうするのも簡単なはずです。使用できる自動コマンドが存在すると私は信じています (ただし、その自動コマンドがスワップファイルを保存する前に実行されるかどうかはまだわかりません)。

いずれにせよ、完全を期すために、vim の STDOUT に何かを書き込む ex コマンドが存在するかどうか知りたいです。または、これが何らかの意味をなす場合。

STDOUTは実際の端末にバインドされているため、おそらく意味がないと思います。たとえば、vimがUIとバッファーの「ビュー」とすべてを端末に送信する場所です。たとえば、vim -c 'vimscript commands'コマンドのいずれかがvimエラーを生成した場合、vimの端末出力を見て、これらのエラーをSTDOUTに表示します。

したがって、ファイルを使用することだけが実用的かもしれません。しかし、私ができるようなある種の狂気があるの!tee /dev/fd/3でしょうか?

さらに、このラウンドアバウト アプローチには問題があり、vimWarning: Original file may have been changedが約 1 秒間、真っ赤な背景テキストにエラーを表示します。これは、ファイルの名前を変更したことが原因であることは間違いありません。ファイル名を同一に保ちながら、サブディレクトリ内でこの作業を行うことで、おそらくこれを回避できます。

4

1 に答える 1

2

それがpコマンドです(およびpin のgrep由来):

ex -sc '%p|q' file

のようになりcat fileます。

于 2013-06-24T07:06:02.330 に答える