web-dev-qa-db-ja.com

NetBeansのようにVimでカーソルの下の変数を強調表示する

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

53
kipelovets

このオートコマンドはあなたが望むことをします:

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

vi highlight current Word

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

:so $VIMRUNTIME/syntax/hitest.vim
86
too much php

設定した場合

:set hlsearch

検索パターンのすべての出現を強調表示し、次に*または#カーソルの下にあるWordの出現箇所を検索します。これにより、目的の方法に移動できます。ただし、構文認識変数の強調表示はVIMの範囲を超えていると思います。

21
Brian Agnew

次のステートメントでは、変数を使用して、カーソルの下にあるWordのすべての出現箇所を強調表示できます。

: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
8
Tjaart

私が本当に欲しいのは、久保田周平の次のプラグインだと思います。

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

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

乾杯。

5
kostasv

カーソルをこれらの単語に置いたときに言語の単語(if#defineなどのステートメント/前処理)を強調表示したくない場合は、この関数を.vimrcに基づいて@too_much_php回答:

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()
4
FunkySayu

vim_current_Word そのまま使用でき、構文を認識し、カスタマイズ可能な色を使用できます。

0
Tom Hale

このバリアントは、速度(CursorMovedの代わりにCursorHoldを使用)およびhlsearchとの互換性のために最適化されています。現在の検索語の強調表示は中断されません。

" autosave delay, cursorhold trigger, default: 4000ms
setl updatetime=300

" highlight the Word under cursor (CursorMoved is inperformant)
highlight WordUnderCursor cterm=underline gui=underline
autocmd CursorHold * call HighlightCursorWord()
function! HighlightCursorWord()
    " if hlsearch is active, don't overwrite it!
    let search = getreg('/')
    let cword = expand('<cword>')
    if match(cword, search) == -1
        exe printf('match WordUnderCursor /\V\<%s\>/', escape(cword, '/\'))
    endif
endfunction
0
TheJJ