最後に編集した場所にジャンプするにはどうすればよいですか?


68

大きなファイルの途中で頻繁に変更を加えgg、先頭にジャンプして何かを確認した後、編集していた場所にマークを付けるのを忘れたことに気づきます。最後に変更された行の場所にジャンプする組み込みの方法はありますか?

回答:


84

この`.コマンドにより、最後の変更が行われます。

`マークに行き、.自動的に最後の変更が行われた位置に設定されている「特別な」マークです。詳細について:help `.は、を参照してください。

また``、最後のジャンプを行う前にカーソルがあった場所に戻る方法もあります。詳細については、:help``を参照してください。

別の便利なマークは次のとおりです`^。これは、挿入モードが停止されたときにカーソルが最後にあった位置です。をご覧ください:help `^

:help mark-motionsマークの使用に関するより一般的な情報については、(自動的に設定される他の「特別な」マークを含む)参照してください。


7
g;またはg,を使用して、変更リスト内の位置間を移動することもできます。参照してください:h g;:h g,
ピーターRincker

3
(バックティック)の'代わりに`(アポストロフィ)を使用することもできます。
-Sparhawk

21

シナリオに合った別のアプローチを次に示しますgg。最後の変更された行ではなく、直前の場所にジャンプします。

つかいます CtrlO

を押すggと、古いカーソル位置がジャンプリストにプッシュされます。から:help jumplist

ジャンプはジャンプリストに記憶されます。CTRL-Oand CTRL-I コマンドを使用すると、古いジャンプの前にカーソル位置に移動し、再び戻ることができます。したがって、リストを上下に移動できます。ウィンドウごとに個別のジャンプリストがあります。エントリの最大数は100に固定されています。

[…]

ジャンプコマンドを使用すると、現在の行番号がジャンプリストの最後に挿入されます。同じ行が既にジャンプリストにあった場合、削除されます。その結果、繰り返したCTRL-O場合、一度だけ古い位置に戻ります。

これには、Vim(viではなく)を+jumplist機能と共に使用する必要があります。:echo has('jumplist')印刷する場合1、これを使用できます。


19

dnetserrの回答とPeter Rinckerのコメントに追加するために、Vimは変更のリストを維持し、それに関連するいくつかのコマンドを持っています。

:changes

変更が一覧表示され、変更箇所と変更内容が表示されます。例えば:

change line  col text
    2     8   17 #include <stdio.h>
    1     3    0 #include "stm32f407.auto.h"
>

の行>は、変更スタックのどこにいるかを示しています。ジャンプリスト(:jumps)やタグスタック(:tags)のようなものです。ジャンプリストやタグスタックと同様に、このリストをたどることができます。

通常モードでは、モーションはg;前の変更場所g,に移動し、次の変更場所に移動します。リストからその変更の前に、g;またはg,その変更に移動するために、変更の番号を入力することもできます。上記で、2g;stdio.hに関連する変更が発生した場所に移動します。

スタックの中央にあるとき、:changes更新からの数字は相対的な距離を示します。例えば:

change line  col text
    1     8   17 #include <stdio.h>
>   0     3    0 #include "stm32f407.auto.h"
    1    10    4 other

これは私が戻って1(行くことができることを示している1g;か、単にg;)または前方1(1g,または単にをg,)。

これは、取得したい変更が実際に数回前に変更された場合に最適です

これの欠点は、通常の動きのように動作しないように見えることです。たとえば、あなたが行うことができないdg;のに対し、以前の変更の場所にカーソルから削除するd'.と、d'^動きなどの作業を行います。


15

g; 以前に編集した行に移動します。


3
g(コンマ)を使用して、新しい編集位置に移動することもできます。
ジェームズ

5

Viの元に戻すコマンドは、最後のコマンドが元uuに戻ったときにやり直しとして機能するため、最後に編集した場所に戻る手段として使用しました。

nocompatible(ほとんどの人がそうであるように)セットでVimを実行している場合は、u続いCTRL+Rて元に戻し、やり直してください。それ以外の場合uuは、Viと同様に機能します。


:set nocompatible使用されない場合になります。
ムル

2
私のvim(with nocompatible)はで2回元に戻しますがuu、同じ効果を使用uCTRL+rます。
シャーバズ

この回答には、Aix / HPUX / Solaris /他のUnixバリアントにvimがない場合、viでも機能するという利点があります。
ガントラムBlohm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.