vimで:openは何をしますか?


18

Vimのドキュメントには、:openコマンドについて次のように記載されています。

This command is in Vi, but Vim only simulates it:

                                                        *:o* *:op* *:open*
:[range]o[pen]                      Works like |:visual|: end Ex mode.
                                {Vi: start editing in open mode}

:[range]o[pen] /pattern/    As above, additionally move the cursor to the
                                column where "pattern" matches in the cursor
                                line.

Vim does not support open mode, since it's not really useful.  For those
situations where ":open" would start open mode Vim will leave Ex mode, which
allows executing the same commands, but updates the whole screen instead of
only one line.

「シミュレーション」の性質、およびこれが異なる動作の実際のコマンドではなくシミュレーションであると見なされる理由についてはコメントしていません。exモード(Q)から実行すると、実際に説明したとおりに動作します。

ただし、別のオープンコマンドもあるようです。通常のコマンドラインから、または異なる引数を使用してexモードから実行すると、それはの同義語のように見えます:edit。コマンドモードから実行した場合/pattern/、それはカーソルを位置付けし、明らかに動作します:editまたとして実行することができます(編集が失敗したカーソル位置がいる場合にのみ明らかにされた状態で。):open /pattern/ fileカーソルと実行を配置しました、:edit file

私の質問は、なぜこれが文書化されていないのですか?私が:edit気づいていないこととの違いはありますか?だった:openの同義語たら:editと途中までしかPOSIXに準拠するための試みで、後に変わったのか?

回答:


13

viの「オープンモード」は、ハードコピー端末など、単一行の端末に役立ちました。オープンモードでは、viにはファイルの「単一行ビュー」がありました。カーソルを移動すると、行全体が再描画され、削除された文字の印刷方法が異なります。

「シミュレーションは、」vimのは、単に、コマンドをサポートするように(ドキュメントが言うように)それが行動することされないこと:visualそれ以来:visual「としてそれ以外の場合は同じである:editあなたは、それはのような演技を見る理由はおそらくだと、」:edit

ソースコードの観点から、()で:open実装されます。正規表現が提供される場合に対処するための処理を行いますが、常にの呼び出しで終わります。ex_docmd.cex_open()do_exedit()

実装では:edit:badd:visualに含まれているex_edit()同じファイル内の関数、およびその関数はある直接呼び出しdo_exedit()(何もありません)。したがって、正規表現パラメーターを処理する場合を除き、同じコードが呼び出されます。do_exedit()少しややこしく、その動作は発行された実際のコマンドに基づいて大幅に変更されますが、open / edit / visualのコマンドトークンを明示的にチェックすることはありません。したがって、3つのコマンドを実行すると、ほぼ同じコードが実行されdo_exedit()ます。


8

入門を表示するためのVIを編集します

ハードコピー端末または最終行から移動できるカーソルのない端末を使用している場合でも、viのコマンドセットを別のモードで使用できます。viコマンドを入力すると、エディターはオープンモードを使用していることを通知します。この名前はexのopenコマンドに由来し、同じモードに入るために使用されます。

ビジュアルモードとオープンモードの唯一の違いは、テキストの表示方法です。

オープンモードでは、エディターはファイル内の単一行ウィンドウを使用し、ファイル内を前後に移動すると、常に現在の行の下に新しい行が表示されます。viでは、zと^ Rの2つのコマンドの動作が異なります。zコマンドはパラメーターを使用せず、現在の行の周囲にコンテキストのウィンドウを描画してから、現在の行に戻ります。

ハードコピー端末を使用している場合、^ Rコマンドは現在の行を再入力します。このような端末では、エディターは通常2行を使用して現在の行を表します。最初の行は、編集を開始したときの行のコピーであり、この行の下の行で作業します。文字を削除すると、エディターは、削除された文字を表示するためにいくつかの\を入力します。エディターは、このような変更後すぐに現在の行を再印刷するため、行が再びどのように見えるかを確認できます。

フルスクリーンモードでviをサポートできる非常に遅い端末でこのモードを使用すると便利な場合があります。これを行うには、exと入力し、openコマンドを使用します。

:openこれは、今日完全に役に立たないViクローンとしてのVimの起源のアーティファクトです。POSIXとの互換性のために残っているとしか考えられません。

あいまいな類似性にもかかわらず、想像力の任意のストレッチによる代替で:openはありません:edit

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.