選択した単語のすべての出現箇所を強調表示しますか?


159

Notepad ++のように、GVimで選択した単語をすべてハイライトするにはどうすればよいですか?

回答:


202

通常モードの場合:

:set hlsearch

その後のコマンドでパターンを検索/ノーマルモードで、または<Ctrl>o続く/挿入モードで。*通常モードでは、カーソルの下にある単語の次の出現箇所を検索します。hlsearch設定されている場合のオプションは、それらのすべてをハイライト表示されます。#単語の前の出現を検索します。

前の検索のハイライトを削除するには:

:nohlsearch

:nohlsearch<CR>いくつかの便利なキーにマップすることをお勧めします。


34
hlsearchたくさん切り替えることを計画している場合は、の:set hlsearch!代わりにマップすることをお勧めします:set nohlsearch。これにより、設定が常にオフになるのではなく、トグルされます。
David Winslow、2010

1
また、カーソルが単語の前(#)または次(*)の出現
箇所に

1
しかし、あなたは、あなたが押された位置に戻ることができます*#によって、<Ctrl>o通常モードで。
ルスラン

8
の代わりに:nohlsearch、次のように使用できます:noh
crisron '29

設定.vimrcnoremap <F4> :set hlsearch! hlsearch?<CR>ハイライトの切り替えとハイライトの削除を切り替えます<F4>
シャリスト2017年

124

*キーは、カーソルの下にある単語の出現をすべて強調表示されます。


31
がオンの場合のみ&hlsearch
wilhelmtell 2010

10
また、カーソルの下にある次の単語にジャンプします。前のオカレンスにジャンプする場合は、を使用します#
Vinicius Pinto

7
現在の位置にとどまることはできますか?
nn0p

@ nn0pはい、できます–その場合は、承認された回答に従ってくださいstackoverflow.com/a/3431203/363688。これは、すべての発生を強調表示する代替アクションにすぎません。
sleepynate 2016

1
この機能を使用する方法はありますが、1つ以上の単語が強調表示されていますか?
Sung Cho、

22

本当に古い質問であることはわかっていますが、誰かがこの機能に興味がある場合は、このコードを確認できます http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle

" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
   let @/ = ''
   if exists('#auto_highlight')
     au! auto_highlight
     augroup! auto_highlight
     setl updatetime=4000
     echo 'Highlight current word: off'
     return 0
  else
    augroup auto_highlight
    au!
    au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
    augroup end
    setl updatetime=500
    echo 'Highlight current word: ON'
  return 1
 endif
endfunction

1
このスクリプトを変更して、z /が押されたときに最初に強調表示されるカーソルの下のテキストが、カーソルが他の単語に移動しても強調表示されたままになるようにすることはできますか?これは、ソースコードをスクロールして最初の単語を探すときに役立ちます。
stensootla 2017

18

最も簡単な方法は、通常モードで入力することです *

有効化と無効化を行うこれらのマッピングもあります

"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv

クリックして単語を選択

set mouse=a     "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>

ボーナス:CountWordFunction

fun! CountWordFunction()
    try
        let l:win_view = winsaveview()
        let l:old_query = getreg('/')
        let var = expand("<cword>")
        exec "%s/" . var . "//gn"
    finally
        call winrestview(l:win_view)
        call setreg('/', l:old_query)
    endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>

マウスで単語を選択して一度に出現回数を数える:OBS:このバージョンでは、最後に「CountWord」コマンドがあることに注意してください

nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>

今、私は使用nnoremap * *``cgnしていますnnoremap # #``cgN
SergioAraujo

と入力した後*、強調表示をオフにするにはどうすればよいですか?
user5359531 2017年

これはドキュメント内の現在の単語を強調するためのものです
Chalist

@ user5359531 :nohまたは:nohlsearch
dylnmc 2017年

@ user5359531について何nnoremap <silent> * :execute "normal! *N"<cr>nnoremap <silent> # :execute "normal! #n"<cr>?これらは単にカーソルの下の単語を強調表示しますが、次の出現に移動しません。
dylnmc 2017年

10

検索ベースのソリューション(*/...)カーソルを移動しますが、これは残念なことです。

別の方法としては、拡張されたmark.vimプラグインを使用して.vimrcから、を完了してダブルクリックで強調表示をトリガーできます(キーボードの選択によってコマンドがトリガーされる方法がわかりません)。

"Use Mark plugin to highlight selected word  
map <2-leftmouse> \m   

複数の強調表示、永続化などが可能です。

強調表示を削除するには、次のいずれかを実行します。

  • もう一度ダブルクリック
  • :Mark (次の選択までオフにする)
  • :MarkClear

2
検索ベースのソリューションは、包括的検索がオンになっている場合にのみカーソルを移動します。次のようにオフにできます::set noincsearch。私の意見では、これはVimで最も厄介な機能の1つであり、新規インストールで最初に無効にする機能の1つです。
jahroy 2013

3
*無条件にカーソルを移動すると思います。そしてincsearch、これは単なる「先読み」であり、実際の位置を変更せずに現在の検索を実行するだけなので、いかに煩わしいかはわかりません。
YvesgereY 2013

3
うわー…そうです。オフincsearchにすると動きが妨げられると思いましたが、簡単なテストであなたが正しいことが確認されました。謝罪いたします。ただし、移動を防ぐマッピングを作成するのは非常に簡単です:nnoremap * *N。検索を実行すると、カーソルが画面全体にジャンプするのが面倒だとは思わないでしょ。しかし...これらは完全に主観的なものです。Vive
ladifférence

3
有効:let @/='hilight_this'にした場合は、も実行hlsearchできます。ジャンプせずにテキストを強調表示し、既存の設定を変更する必要はありません。これにより、検索レジスタに現在格納されている値が変更されます。
ベンデイビス

1
これは受け入れられる答えになるはずです。<リーダー> mが仕事をします。ダブルクリックをマッピングする必要はありません。
Sassan 2017

4

まず(または.vimrcで):

:set hlsearch

次に、強調表示したい単語の上にカーソルを置き、を押します*

hlsearch現在の検索のすべての出現箇所を強調表示することを*意味し、カーソルの下の単語を検索することを意味します。


3

まず、次のコマンドを発行して、hlsearchが有効になっていることを確認します

:set hlsearch

これをセットとして.vimrcファイルに追加することもできます

set hlsearch

コマンドモードまたは通常の検索コマンドでクイック検索メカニズムを使用すると、すべての結果が強調表示されます。結果間を前方に移動するには、「n」を押して後方に移動し、「N」を押します

通常モードでは、カーソルの下の単語をすばやく検索し、1つのコマンドで次の出現箇所にジャンプするには、「*」を押します。また、カーソルの下の単語を検索し、「#」を押して前の出現箇所に移動することもできます。 」

通常モードでは、クイック検索は、

/searchterm<Enter>

使用のハイライトを削除するために、これを.vimrcのショートカットにバインドしました

:nohl



2

カーソルを動かさずに単語を強調表示するには、plop

" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>

あなたのvimrcに。

これの良いところはg*g#「通常」*やのように動作し#ます。


開始するにはhlsearch、「短い形式」を使用できます(コマンドモードで「noh」で始まる別の関数がない場合):noh。または、長いバージョンを使用できます。:nohlsearch

非常に便利なように(私はhlsearch1日に20回程度トグルしていることに気づきました)、次のようにトグルするものをマップできますhlsearch

" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>

。:。あなたがいる場合<leader>である\(それがデフォルトである)、あなたは押すことができます\stで(すぐに)通常のトグルにモードhlsearch

または、:nohマッピングしたいだけかもしれません:

" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>

上記単に実行されます:nohlsearchので、(とは異なり:set hlsearch!、それはまだ単語の横を押す時間強調表示されます)*または#ノーマルモード。

乾杯



1

使用する autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))

IncSearch何かに設定したことを確認してください。例えばcall s:Attr('IncSearch', 'reverse')。または、代わりに別のハイライトグループを使用できます。

これにより、カーソルの下にあるすべての単語が遅延なくハイライト表示されます。コードを調べていると、遅延が遅くなることがわかりました。ハイライトの色は単語の色と一致するため、スキーマとの一貫性が保たれます。


0

なぜだけではない:z /

これにより、カーソルの下の現在の単語とその他の出現箇所が強調表示されます。また、検索するアイテムごとに個別のコマンドを指定する必要はありません。おそらくそれはunholy gvimでは利用できないのでしょうか?デフォルトではvimにあります。

*カーソルを次の出現箇所に移動させる場合にのみ有効です。2つのものを視覚的に比較するとき、カーソルを動かしたくない場合が多く、毎回*キーを押すのは面倒です。


通常、Vimとgvimは同じコマンドセットを持っています。ヘルプドキュメントに「z /」コマンドへの参照はありません。
wds

gvimだけでなく、vimでも使用できます。チェックしたところ—明らかに動作しません。
Ruslan

z / は、以前の回答で述べたこのスクリプトが使用されている場合に機能します。
fzzylogic

0
  1. これらの行を~/.vimrcファイルに追加します

" highlight the searched items set hlsearch " F8 search for word under the cursor recursively , :copen , to close -> :ccl nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>

  1. で設定をリロードします :so%
  2. 通常のモデルでは言葉を超えて行きます。

  3. プレス* F8を押して、プロジェクト全体を再帰的に検索します


0

たとえば、このプラグイン:

ちょうどを検索カーソルの下vimawesome.com

重要なのは、clagccsが述べたように、ハイライトが検索と競合しないことです:https : //vim.fandom.com/wiki/Auto_highlight_current_word_when_idle

検索と競合しない方法のスクリーンショット: ここに画像の説明を入力してください 注:

  • vim-illuminateハイライトはデフォルトで、スクリーンショットで下線に切り替えました
  • vim-illuminateは、デフォルトでカーソルの下の単語を強調表示/下線します。スクリーンショットでは、設定を解除しています
  • 私のカラースキームは非常に灰色がかっています。あなたもチェックしてカスタマイズしてください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.