Vimのないシステムを使用していて、デフォルトのnvi
(BSDシステム)またはオリジナルのvi
(Arch Linux)。
かなりの違いがありますが、最大の煩わしさは、自分だけを元に戻すことができることです。 最後の操作。2回目に u を押すと、「やり直し」が行われます。
これを機能させる方法はありますか?
回答
nvi(1)
から:
u Undo the last change made to the file. If repeated, the u command alternates between these two states. The . command, when used immediately after u, causes the change log to be rolled forward or backward, depending on the action of the u command.
したがって、 u を押してから、。を押し続けて元に戻します。 u もう一度、方向を「反転」し、を押します。はやり直しになります。
これについては昨日まで知りませんでした。どういうわけか新しい機能だと思いましたが、 1996年の少なくともnvi1.79以降、このように機能しているようです。
これは機能しません 元のvi ;元に戻す方法は次のように記載されています。
u Undoes the last change made to the current buffer. If repeated, will alternate between these two states, thus is its own inverse. When used after an insert which inserted text on more than one line, the lines are saved in the numeric named buffers (3.5).
これは、 u をもう一度押すと変更がやり直されるという非常に複雑な言い方です。
これは、Vimの:help undo
が言っていることでもあります(そして、なぜそれがnvi
):
u Undo [count] changes. {Vi: only one level}
回答
元の
は複数の元に戻す必要があります(1行で複数の変更を元に戻すことができるU
を除く)は、最新の9つの変更を保持する番号付きレジスタです。または削除。
番号付きレジスタから入力した場合、後続のドットコマンドは、コマンドを繰り返すときにそのレジスタをインクリメントします。
例:次のテキストで、カーソル行を>
で示し、
aaaa > bbbb cccc dddd eeee
コマンドdd..
の結果は次のようになります。
aaaa > eeee
次に"1P
と入力すると、viはレジスタからの最新の削除"1
:
aaaa > dddd eeee
.
は、"2P
を実行して、次に新しいレジスタの内容を配置します。もう一度.
を押すと、レジスタ
。
つまり、"P..
は、削除したすべてのテキストを元に戻し、そのままにします
aaaa > bbbb cccc dddd eeee
見事ではありませんが、何もないよりはましです。さらに便利なことに、バッファの最初または最後で使用して、番号付きレジスタの内容をすばやく調べることができます。その後、不要なものを簡単に削除できます。
vimに記載されています。 :help redo-register
の下。
u
を使用して1つの変更のみを元に戻すか、1行を元の状態に戻すことができます。U
で編集を開始する前でした。