行ったかもしれない変更を安全に元に戻すにはどうすればよいですか?


12

あまりにも多くの場合、間違ったウィンドウにフォーカスを合わせて入力するというミスをします(USBオーセンティケーターを使用して何度か入力しました)。多くのホットキーが有効になっているプログラム(Gmail、VLC、Vim)では、これにより、意図しない変更が行われるという意図しない結果になることがよくあります。

私は時々自分のステップをトレースし、変更を修復するために入力した内容を覚えたり、自分自身を早期に見つけた場合に微調整した設定を元に戻すことができます。残念ながら、常にそうとは限りません。

Vimでは、簡単に元に戻すテキストの行を変更するのと同じくらい無害で明白なものがあります。または、あまり簡単に識別されない何かを知らないうちに変更した可能性があります。誤って一連の不要なコマンドをVimに入力した場合、設定の編集や変更を確認して元に戻すにはどうすればよいですか?


1
「元に戻す」アクションをお探しですか?:e!それを行うだろう
ジャスパー

1
:e!最後の正しい状態以降に保存していない場合は良くないと思いますu。また、大量のものを入力した場合は不十分かもしれません。(date monthたとえば、入力した場合、タグを削除し、マークを設定し、検索を実行したことになります。これを介して元に戻すのは非常に混乱しuます。)
wchargin

1
@WChargin uシーケンスの一部であるということではなく、途中でいくつかの取り消しを実行します。
yo

回答:


14

呼び出す

:undolist

最後の変更セットをいつ作成したかを確認します。「3秒前」など、いくつかの変更が行われたと表示され、1分前などに意図的に変更しただけであることがわかっている場合は、実行します

:earlier 10s

目的の状態に戻す。それ以外の場合、最近の変更がなければ、何もする必要はありません。


詳細なリファレンス: :help undo-tree


4

質問を言い換えると、ファイルに加えた変更を表示するか、通知する方法を探してから、元に戻す機能を使用します。これをサポートする他の方法やプラグインがあるかもしれません。しかし、私は同じ目的のために使用してきたものを説明します。

これを行うには、既存のvim機能を組み合わせます。たとえば、次のような関数を定義できます。

" Function: View changes after the last save
function! s:DiffSinceSave()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
  exe "normal! ]c"
endfunction
com! DiffSaved call s:DiffSinceSave()

その後、後で呼び出すことができ、ショートカットキーをマップすることもできます。

" Map key to function: View changes after the last save
nnoremap <leader>? :DiffSaved<CR>

これにより、最後の保存以降に行われた変更を示す分割ウィンドウベースの差分ビューが開きます。行われた変更を特定したら、そのビューを終了し、元に戻す、元に戻すツリーなどの他のvim機能、またはプラグインを使用して、以前の状態に戻すことができます。

これが有用であるためには特定の種類のワークフローが必要なので、これは理想的ではないことを理解しています。しかし、これはかなりうまくいきます。プラス面としては、vimの動作方法を変更したり、外部のものに依存したりしていません。

これがあなたのお役に立てば幸いです。しばらく前に、vim Wikiaを含むインターネットで見つかったスニペットからこのソリューションを適応させました。だから、それはクレジットの期限です。


3

これに対する簡単な答えuは、保持したい変更を元に戻すまでを押してからを押すことCtrl-Rです。


0

@superjerと同様に、ステータスラインのu赤い[+]マーカーが消えるまで押し続けます。

set statusline=%f\ %#Error#%m%##

最後に変更されていない状態に自動的に元に戻すキーがあると便利です。しかし:e!、これも素晴らしい解決策です。最近では、Vimは元に戻す履歴の「破棄された」変更を保持します。
-joeytwiddle

5
そのコマンドは:earlier 1fです。これ1fは「1つ前に保存された状態」を意味するため、ファイルを保存した前の時間に戻ります。バッファが変更されると、すべての変更が取り消されます。バッファーが変更されていない場合(つまり、現在保存されている状態)、ファイルを保存した前の時刻に移動します。
ジェムサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.