リダイレクトを使用して Vim の標準入力をディスク上のファイルに変更できないのはなぜですか?

リダイレクトを使用して Vim の標準入力をディスク上のファイルに変更できないのはなぜですか?

私は「UNIX タイムシェアリングシステム Dennis M. Ritchie と Ken Thompson「論文では、標準入出力のリダイレクトの例として、ed エディタの例が示されています。

コマンドはed <script、スクリプトをエディター コマンドのファイルとして解釈します。つまり、「<script」は「 から入力を取得するscript」という意味です。

しかし、vim を使用して同じことを実行しようとすると、「入力の読み取りエラー」というエラーが表示されます。

[m@localhost rough]$ vim t2 <t
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

それはなぜでしょうか?

答え1

edそしてex行編集者テキスト ファイル内の行によって操作できる種類のユーザー インターフェイスを備えています。

viそして、VIMなどのそのクローンはすべてフルスクリーンエディタ入力と出力をテキスト ファイルの行として扱わないユーザー インターフェイスを備えています。入力は行にグループ化されていない個々の文字と文字シーケンスです。出力はビデオ端末に描画するための個々の文字とエスケープ シーケンスおよび制御シーケンスです。

モデルユーザーI/Oテキスト ファイルは、GUI プログラムはもちろん、インタラクティブなフルスクリーン TUI プログラムにもマップされません。

どのような動作になるかはプログラムによって異なります。フルスクリーン TUI プログラムの中には、標準入力が端末でないと認識して中止するものもありますnvi。VIM などの他のプログラムは警告を発しますが、非端末入力ファイルを端末入力として扱います。そのため、入力がスクリプト コマンドとして扱われることを期待している人にとっては、少々奇妙な動作になります。また、たとえば、lessユーザー インターフェイス用に端末デバイスを明示的に開き、その (入力部分) に標準 I/O を使用しないプログラムもあります。さらに、ほとんどのシェル (ライン モード以上の対話型ユーザー インターフェイスを備えていることに注意してください) などの他のプログラムは、非対話型モードに切り替わります。

1974 年に Unix について書かれた論文は、ライン モード ユーザー インターフェイスとフル スクリーン ユーザー インターフェイスの違いを理解するための良いガイドにはなりません。おそらく、ビデオ端末用の最初の Unix エディターは、George Coulouris の でem、1 年後のことでした。また、termcap、(独自の) コマンド ライン編集機能を備えたシェル、および非グラフィック特殊文字を使用するライン ディシプリンのデフォルトも、この後のことでした。

関連情報