Vimでやり直す(「元に戻す」)にはどうすればよいですか?


697

Vimでは、元に戻す操作が多すぎました。これを元に戻す(つまり、やり直す)にはどうすればよいですか?


106
私はすでに2つの近い投票を集めたので、vimはプログラマーのエディターなので、これはここに属していると思います。
flybywire、2009年

28
私は同意します、これはプログラミング関連であり、それは本当の質問です。
DigitalRoss

41
コミュニティがVimがSOに属し、プログラミングツールであることをコミュニティがずっと前に決定したにもかかわらず、この周りの誰かが周りを回り、すべてのVim質問を「SUに属する」とマークします。
ブライアンカーパー、

@ブライアン:この合意に達した文書へのリンクはありますか?
phpが多すぎる

12
meta.stackexchange.com/questions/20251/…でも去年いつかこのことを思い出した。Vim / EmacsはIDEです。さらに、両方の構成ファイルで使用される言語はチューリング完全なスクリプト言語であるため、Vimをセットアップするという行為自体がプログラミングです。
ブライアンカーパー、

回答:


907

Ctrl+r


2
私はundoTreeプラグインをそこに捨てたいのですが、元に戻すとやり直しの混乱で一見自分を台無しにしているように思えるときのために、とても素晴らしいです。
Jake Sellers

3
私がviについて読んでいる場合、私の指は自分で行動するだけです。viコマンドは、stackoverflowでは機能しません。:-)
ciscogambo 2014年

2
Macユーザーへの注意:Mac端末でCtrl + rを押すと、vimで1日が台無しになります。Macターミナルで元に戻す適切なキーの組み合わせがわからないが、間違いなくCtrl + rではない。
tpartee 2017年

@tpartee macOSのターミナルアプリのvimでCtrl + rを使用しただけです-ここでは問題ありません。
Jase

3
たぶん@tparteeはCmd + r混乱を招くことを意味しましたか?それは確かに奇妙なことをします。しかし、Ctrl + r私だけ(マック+ tmuxは+ VIM)の罰金を働いた
dwanderson

133

また:undolist、元に戻す履歴に複数のパスが表示されるも確認してください。これは、元に戻しすぎた後に誤って何かを入力した場合に役立ちます。


22
@amindfv:から番号札を取る:undolistとタイプ:undo 178(言って)ステップ178に巻き戻す
ピーター

何が元に戻される:undolistかを正確に示す方法はありますか?
csharpfolk 2015年

2
使用@csharpfolk undotreeプラグイン(github.com/mbbill/undotree

54

:earlier/を使用し:laterます。必要なすべてをやり直すには

later 9999999d

(最初に最大9999999日前にファイルを編集したと想定)、または、現在の取り消し状態と必要な取り消し状態の違いを覚えている場合はNhNmまたはNs時間、分、秒をそれぞれ使用します。+ :later N<CR><=> Ng+および:later Nfファイル書き込み用。


1
:latervi(vimではなく、Googleで「vi」を検索しましたが、すべての結果は「vim」でした)で私のために働いた、ありがとう
Luc

@Lucあなたがviコマンドを持っているほとんどすべての場所で、それはvim実行可能ファイルへのシンボリックリンクまたはそのコピーです。どこでも完全にではありません。
ZyX

@ZyX私はそれが真実であることを望みます。私はbashがをスローした後にのみviを使用しますvim: command not found。次に行うのはalias vim=vi、自動的に入力するためですが、それでも単純な古いviです。また、viがvimのエイリアスであれば、redo(ctrl + r)は適切に機能します。
Luc

2
9999999dは27395年前です。元に戻す機能はviに実装されていなかったと思います。徹底的なタイピングの労力を省き、妥当な数を使用することをお勧めします。9999dは約27年、999dは2.7年に相当します。ほとんどの場合はそれで十分だと思います...
ChristophK

45

Vimのドキュメント

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}


14

最初にEscキーを押して編集モードを終了します。

そして、

以下のために元に戻す、使用のuキーは何度でもあなたは元に戻します。

以下のためにやり直し、使用Ctrl+ rキー


11

Vimドキュメント「取り消し」と「やり直し」の部分を参照してください。

:red [o](元に戻された1つの変更をやり直す)と{count} Ctrl+ r(元に戻された{count}の変更をやり直す)はどちらも問題ありません。

また、:earlier {count}(古いテキスト状態に{count}回移動する)は、常に取り消しとやり直しの代わりになる可能性があります。


5

CTRL+r

「r」は小文字です。


9
実際に、それは問題ではないはず-伝統的なコンソールは、の区別を持っていない^r^R、とVimはそれに従います。
ephemient

@ephemient:同意した。MS-DOSでは、小文字を入力することもできません^XX任意の文字を使用できます)。
nyuszika7h 2011年

Vimでは、Ctrl-Shift-R(ctrlと大文字のR)は置換モードです。
Paul Stelian

5

VsVim for Visual Studioを使用していますか?

Visual StudioでVimコマンドのバインディングを提供するVsVimを実験しているときに、これに遭遇しました。

私は知っています CtrlrはVim自体ますが、この特定のバインディングはVsVimでは機能しません(少なくとも私のセットアップでは機能しませんか?)。

しかし作業を、コマンドです:red。これは上記よりも少し面倒ですが、本当に必要な場合は問題ありません。


質問はVisual Studioではなくvimについて具体的に尋ねているため、反対票を投じました。
John Von Neumann、

3
@JohnVonNeumannこれ、VSのコンテキストでは、Vim、または少なくともvimバインディングに関連しています。結局、それがこの質問に私を導いたものです。情報を追加するために誰かを罰することは、たとえそれがおそらくOPの範囲をわずかに超えて拡大したとしても、少し厳しく、呼びかけられていないようです。
Kjartan

2

実際には、:undolistは使いにくく、変更のVim :earlier:later時間の追跡は、コースの細かい修正にのみ使用できます。

そこで、これらの機能を組み合わせて、「Gundo」と呼ばれるブラウズ可能な取り消しのビジュアルツリーを提供するプラグインを使用します。

明らかに、これは細かい修正が必要な場合、または戻りたいドキュメントの正確な状態が不明な場合にのみ使用するものです。参照:Gundo。Vimのundoツリーをスタイリッシュにグラフ化する

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