Vim / Viにカーソルを検索ハイライトの最後に移動するコマンドはありますか?


84

選択した検索セグメント内を移動するコマンドはVim / Viにありますか?

たとえば、単語を検索した場合、強調表示されたセグメントの最後にカーソルを移動するコマンドはありますか?「FishTaco」という単語があり、「Fish」のすべてのインスタンスを検索して、その後に何かを挿入するとします。グローバル置換を実行できることはわかっていますが、いくつかの非順次インスタンスでのみ変更を加えたい場合はどうすればよいですか?

現在強調表示されているセグメントの最後にカーソルを移動してアクションを実行できると便利な場所がわかりました。


3
これは質問への答えではありませんが、すべてFishをに置き換えるという最終的な目標を達成するためにFishTaco、を実行できます。これにより、まだフォローされ:%s/Fish\(Taco\)\@!/&Taco/Fishいないすべてのものが検索されTaco、に置き換えられFishTacoます。ネガティブルックアヘッド検索と、一致した用語の後にTaco。が続く置換を組み合わせます。
ジムスチュワート

@JimStewartこのコメントに少なくとも回答ほど多くの+1がない理由がわかりません。これは忍者レベルのvimです。
Still.Tony 2018年

回答:


133

あなたはこれでそれを行うことができます:

/Fish/e

/e最後には、探索領域(の代わりに、デフォルトで最初の文字の末尾にカーソルを土地。


32
+ nまたは-nを追加して、カーソルを終了の前後にn文字配置できることに注意してください。
ネイサンフェルマン2012年

10
注目に値するのは、/Fish検索を完了した後//e、Vim 7.4で最後にジャンプしてgn、見つかった結果を視覚的に強調表示できることです。
smathy 2014年

@ghbarrattの回答もご覧ください。強調表示された一致にカーソルを置くための、より多くのオプションがあります。
ニマ

81

Fishの最後の文字の後にカーソルを置きたいだけの場合は、次を使用できます。

/Fish/e+1

hの後にカーソルを置きます。(+1カーソルがないと、カーソルは最後の文字の左側に移動します。)

Fishの後にカーソルを置くことに特に関心があるが、「FishTaco」にカーソルが表示されている場合にのみ、次のいずれかのオプションを試すことができます。

使用できます

/FishTaco/s+4

カーソルはFishとTacoの間になります。/s+44ヶ所検索語の開始後にカーソルを置きます。

同様に使用できます

/FishTaco/e-3

これにより、カーソルが最後の(終了)文字の左側の3つ左に配置されます。

使用することもできます

/FishTaco/b+4 

/b+4として扱われるため/s+4


13
素晴らしい説明ですが、今はお腹が空いています。
ケニー2012年

27

をすでに検索している場合は/Fish、を介して検索をすばやく変更して一致の最後に移動できます//e。これにより、最後の検索が繰り返されますが、eすでに説明されている修飾子が追加されます。


1
// e + numberはまさに私が探していたものです!驚くばかり。
arkod 2013

12

/ long-regexp1 \zs long-regexp2 / ..カーソルは\ zs停止します。:help \ zsを参照してください。


11

視覚的に選択したら、を使用oして、選択したブロックの開始と終了の間でカーソル位置を切り替えることができます。選択範囲が行単位の場合、これにより位置が切り替わります。つまり、カーソルは選択範囲の開始行と終了行に移動しますが、開始文字または終了文字には移動しません。選択が文字単位の場合、移動も文字単位です。

`<`>を使用して、ビジュアルブロックの開始と終了の間でカーソルを切り替えることもできますが、これは選択自体に影響するため、選択範囲をリセットまたは調整するために使用されます。

編集:ああ、しかし検索ハイライトの場合o、行の挿入が開始されるため、これは機能しません。検索のハイライトは視覚的な選択と同じではないと思います、ごめんなさい:)


私もそれを知りませんでした。これは、最初からやり直すことなく、選択範囲の先頭を変更するのに最適です。(たとえば、選択を開始するのが早すぎたり遅すぎたりした場合)
–TimothéeBoucher 2014

8

あなたの質問の「試合終了時のカーソル」の部分はすでに回答されています。

あなたがすることができます:%s/Fish/FishTaco/c。これにより、すべての置換を確認または拒否し、「試合終了時のカーソル」ビジネス全体をスキップする機会が得られます。


素晴らしいヒント。'y'と入力すると、最初の置換のみが実行されます。それぞれを確認するにはどうすればよいですか?
ジョーダンパーマー2012年

1
あなたが入力するのは次の試合を待ちに行くyか、nそしてそう左の一致がないまでに。それ以降のすべての置換を受け入れるには、と入力しa、それらを拒否するには、と入力しqます。
romainl 2012年

1
実はg決勝戦のあとが足り/なかったので、列に並んでいませんでした。ヒントをありがとう。
ジョーダンパーマー2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.