Vim-検索で強調表示されたテキストを選択しますか?


53

vimでは、で検索する代わりに、単語やフレーズにジャンプする検索を頻繁に実行しますh/j/k/l。それnから、オカレンス間をホップするためにヒットしました。

このテキストがあるとしましょう:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

私は入力/an arrowしてエンターキーを押します。そのフレーズは強調表示されており、でジャンプしnます。

今、私はそのテキスト視覚的に選択したい、多分それを変更または削除したい。(はい、私は:s置換コマンドを知っています。)

私のカーソルは「矢印」の先頭の文字「a」にあるのでv、を押しeてから数回押してフレーズ全体を強調表示します。しかし、もっと短くて意味のある方法があると感じています。結局のところ、興味のあるテキストは既に指定しました。

「現在の検索選択を視覚的に選択する」というコマンドを作成するにはどうすればよいですか?

回答:


38

gnバージョン7.4以降で使用できます(gN逆方向に使用することもできます)。それはv//eトリックを置き換えます。

`n`のように、最後に使用した検索パターンを前方検索し、ビジュアルモードを開始して一致を選択します。

詳細については、:help gnまたはこのVimcastを参照してください。


これはコメントを別の回答に複製するものであり、現状ではあまり役に立ちません。ドキュメントを引用して、回答が自立できるようにすることをお勧めします。
bwDraco

2
答えをより良くしたいのですが、それが役立つかどうかはわかりません。質問は目的をきちんとレイアウトし(「次の検索結果を視覚的に選択する」)、gn質問どおりに実行します。別の回答として提出すると、それがの完全な代替物であることが強調されv//eます。答えを編集してドキュメントを追加しただけですが、それでいいですか?
デビッドロード

いいですね、ありがとう。ヘルプが必要な場合は、ツアーヘルプセンターをご覧ください。スーパーユーザーへようこそ。ご滞在をお楽しみください。
bwDraco

1
素晴らしい!このスレッドを最新かつ最高のものに更新していただきありがとうございます。:)
ネイサンロング


8

v//eビジュアルモードを終了した後、次/前の検索結果にジャンプすると、通常のように結果の先頭ではなく、末尾にカーソルが置かれるため、それだけでは不十分であることがわかりました。

これを修正するには、最初に検索結果の最後にジャンプし(//e)、次に最初に視覚的に選択する必要があります(v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

乾杯。


対称性の場合:(nnoremap g? ??b<cr>v//e<cr>同じことを行いますが、前方ではなく後方を検索します)
カイルストランド14年

2

Vimが検索の一致を通常のテキストオブジェクトとして扱うようにするVim-Search-Objectsプラグインva/あります。そのため、検索を実行した後、単純に(一致を視覚的に選択)できます。


1

これを行う「ダンバー」方法は、次のようにキー(この場合はF5)をマッピングすることです。

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

/an arrowF5を押した後。


これにより、+1。省略すると、検索された部分のみが選択されます。一方、nnoremap <F5> v//e<CR>うまくいくようです。
デニスウィリアムソン

@Dennis Williamson、+ 1は、検索されたものを正確に選択するために必要です。+ 1を削除すると、カーソルがある文字が選択されないため、最後の文字は選択されません。いずれにせよnnoremap <F5> v // e <CR>の方がはるかに優れています。
ジョニー

私のためにキャラクターを選択します。Iを押した場合xc、あなたを行った後にF5はなくせずに+1カーソル下の文字を含む検索文字列全体、削除されます。
デニスウィリアムソン

@Dennis Williamson、「選択」オプションが「排他的」に設定されていることを知りましたが、デフォルト値は「包括的」です。だから、+ 1なしで機能しました。(ヘルプ選択を参照)
ジョニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.