63

私はNetBeansで作業し、この機能が気に入りました。変数名にカーソルを置くと、変数のすべての出現箇所が強調表示されます。これは、変数のすべての出現箇所をすばやく検索するのに非常に役立ちます。この動作をVimに追加することは可能ですか?

4

10 に答える 10

96

この自動コマンドは、あなたが望むことを行います:

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

vi 現在の単語を強調表示する

編集:この例ではIncSearchハイライト グループを使用しましたが、次のコマンドを実行すると、使用する他の色を見つけることができます。

:so $VIMRUNTIME/syntax/hitest.vim
于 2009-10-12T00:25:22.270 に答える
24

設定した場合

:set hlsearch

検索パターンのすべての出現箇所を強調表示してから、*または#を使用して、カーソルの下にある単語の出現箇所を検索します。これにより、必要なものが得られます。ただし、構文を意識した変数の強調表示は、VIM の範囲を超えていると思います。

于 2009-10-11T17:45:06.957 に答える
9

このステートメントは、変数がカーソル下の単語のすべての出現箇所の強調表示を有効/無効にできるようにします。

:autocmd CursorMoved * exe exists("HlUnderCursor")?HlUnderCursor?printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\')):'match none':""

次のようにして強調表示を有効にします。

:let HlUnderCursor=1

そしてそれを無効にします:

:let HlUnderCursor=0

強調表示を有効/無効にするためのショートカット キーを簡単に定義できます。

:nnoremap <silent> <F3> :exe "let HlUnderCursor=exists(\"HlUnderCursor\")?HlUnderCursor*-1+1:1"<CR>

変数を削除すると、match ステートメントが実行されなくなり、現在の強調表示がクリアされません。

:unlet HlUnderCursor
于 2014-09-17T10:02:29.760 に答える
6

ifカーソルがこれらの単語の上にあるときに言語の単語 ( ,などのステートメント/前処理) を強調表示したくない場合は、 @too_much_php answer に基づいて#defineこの関数を配置できます。.vimrc

let g:no_highlight_group_for_current_word=["Statement", "Comment", "Type", "PreProc"]
function s:HighlightWordUnderCursor()
    let l:syntaxgroup = synIDattr(synIDtrans(synID(line("."), stridx(getline("."), expand('<cword>')) + 1, 1)), "name")

    if (index(g:no_highlight_group_for_current_word, l:syntaxgroup) == -1)
        exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
    else
        exe 'match IncSearch /\V\<\>/'
    endif
endfunction

autocmd CursorMoved * call s:HighlightWordUnderCursor()
于 2016-04-11T16:35:41.810 に答える
5

あなたが本当に欲しいのは、久保田修平による次のプラグインだと思います。

http://www.vim.org/scripts/script.php?script_id=4306

説明によると、「このスクリプトは、多くの IDE のようにカーソルの下の単語を強調表示します。」

乾杯。

于 2013-03-25T16:04:18.777 に答える
0

受け入れられた回答と同様ですが、この方法では、単語の上にカーソルを置いた後、強調表示が表示されるまでの遅延時間を設定できます。は1000ミリ秒単位で、1 秒後に強調表示されることを意味します。

set updatetime=1000

autocmd CursorHold * exe 
    \ printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))

詳細については、を参照:h CursorHoldしてください。

于 2020-11-17T23:22:26.327 に答える