私はNetBeansで働いていて、この機能が好きでした。変数名にカーソルを置くと、変数のすべての出現箇所が強調表示されます。これは、変数のすべての発生をすばやく検索するのに非常に役立ちます。この動作をVimに追加することは可能ですか?
設定した場合
:set hlsearch
検索パターンのすべての出現を強調表示し、次に*
または#
カーソルの下にあるWordの出現箇所を検索します。これにより、目的の方法に移動できます。ただし、構文認識変数の強調表示はVIMの範囲を超えていると思います。
次のステートメントでは、変数を使用して、カーソルの下にある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
私が本当に欲しいのは、久保田周平の次のプラグインだと思います。
http://www.vim.org/scripts/script.php?script_id=4306
説明によると、「このスクリプトは、多くのIDEのようにカーソルの下の単語を強調表示します。」
乾杯。
カーソルをこれらの単語に置いたときに言語の単語(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()
vim_current_Word
そのまま使用でき、構文を認識し、カスタマイズ可能な色を使用できます。
このバリアントは、速度(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