Vimのないシステムで、デフォルトnvi
(BSDシステム)またはオリジナルvi
(Arch Linux)を使用することがあります。
かなりの違いがありますが、最大のイライラは、最後の操作しか取り消せ ないことです。もう一度押すとu「やり直し」になります。
これを機能させる方法はありますか?
Vimのないシステムで、デフォルトnvi
(BSDシステム)またはオリジナルvi
(Arch Linux)を使用することがあります。
かなりの違いがありますが、最大のイライラは、最後の操作しか取り消せ ないことです。もう一度押すと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年から少なくともnvi 1.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}
オリジナルvi
が複数の取り消し(U
1行内で複数の変更を元に戻すことができる)に最も近いものは、最新の9つの変更または削除を保持する番号付きのレジスタです。
番号付きレジスタから入力すると、後続のドットコマンドは、コマンドを繰り返すときにそのレジスタをインクリメントします。
たとえば、次のテキストを使用して、カーソル行をで示します>
。
aaaa
> bbbb
cccc
dddd
eeee
コマンドのdd..
結果は次のとおりです。
aaaa
> eeee
次に、と入力すると"1P
、viはレジスタから最新の削除を行います"1
。
aaaa
> dddd
eeee
叩く.
ことによって、次の最も最近のレジスタの内容を置く"2P
、と打つ.
再びはレジスタの内容を配置します"3
。
つまり、要するに、"P..
削除したすべてのテキストを元に戻し、
aaaa
> bbbb
cccc
dddd
eeee
華麗ではありませんが、何もないよりはましです!さらに便利なことに、バッファの先頭または末尾で使用して、番号付きレジスタの内容をすばやく検査できます。その後、不要なものを簡単に削除できます。
これはvimの下に文書化されてい:help redo-register
ます。