私はNetBeansで作業し、この機能が気に入りました。変数名にカーソルを置くと、変数のすべての出現箇所が強調表示されます。これは、変数のすべての出現箇所をすばやく検索するのに非常に役立ちます。この動作をVimに追加することは可能ですか?
10 に答える
設定した場合
:set hlsearch
検索パターンのすべての出現箇所を強調表示してから、*
または#
を使用して、カーソルの下にある単語の出現箇所を検索します。これにより、必要なものが得られます。ただし、構文を意識した変数の強調表示は、VIM の範囲を超えていると思います。
このステートメントは、変数がカーソル下の単語のすべての出現箇所の強調表示を有効/無効にできるようにします。
: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
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()
あなたが本当に欲しいのは、久保田修平による次のプラグインだと思います。
http://www.vim.org/scripts/script.php?script_id=4306
説明によると、「このスクリプトは、多くの IDE のようにカーソルの下の単語を強調表示します。」
乾杯。
受け入れられた回答と同様ですが、この方法では、単語の上にカーソルを置いた後、強調表示が表示されるまでの遅延時間を設定できます。は1000
ミリ秒単位で、1 秒後に強調表示されることを意味します。
set updatetime=1000
autocmd CursorHold * exe
\ printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
詳細については、を参照:h CursorHold
してください。