nviおよび/または元のviで複数回元に戻すことはできますか?

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の下。

回答

元のviを使用して、[n]を押します。 uを押してnステップ戻ります。段階的に戻るには…

  • [n] uを押してnステップ戻ります
  • 次に[n] uを押しますnステップをやり直す
  • 次に[n + 1] uを押して[n + 1]ステップに戻ります
  • その他

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です