выделите переменную под курсором в vim, как в netbeans

<p>я работал в netbeans и мне понравилась эта функция: когда вы помещаете курсор в имя переменной, все вхождения переменной подсвечиваются. это очень полезно для быстрого поиска всех вхождений переменной. можно ли добавить это поведение в vim?</p>

<p>эта автокоманда будет делать то, что вы хотите:</p><pre><code>:autocmd cursormoved * exe printf('match incsearch /\v\<%s\>/', escape(expand('<cword>'), '/\')) </code></pre><p> <a href="https://i.stack.imgur.com/z7omd.png"><img src="https://i.stack.imgur.com/z7omd.png" alt="vi highlight current word"></a> </p><p><strong> редактировать: </strong> я использовал группу подсветки <code>incsearch</code> в моем примере, но вы можете найти другие цвета для использования, выполнив эту команду:</p><pre><code>:so $vimruntime/syntax/hitest.vim </code></pre>

<p>если вы установите</p><pre><code>:set hlsearch </code></pre><p>выделите все вхождения шаблона поиска, а затем используйте <code>*</code> или <code>#</code>, чтобы найти вхождения word под вашим курсором, что даст вам некоторый путь к тому, что вы хотите. однако я думаю, что подсветка переменных с учетом синтаксиса выходит за рамки vim.</p>

<p>этот оператор позволит переменной включить/отключить выделение всех вхождений word под курсором:</p><pre><code>:autocmd cursormoved * exe exists("hlundercursor")?hlundercursor?printf('match incsearch /\v\<%s\>/', escape(expand('<cword>'), '/\')):'match none':"" </code></pre><p>можно активировать выделение с помощью:</p><pre><code>:let hlundercursor=1 </code></pre><p>и отключите его с помощью:</p><pre><code>:let hlundercursor=0 </code></pre><p>можно легко определить горячую клавишу для включения/выключения подсветки:</p><pre><code>:nnoremap <silent> <f3> :exe "let hlundercursor=exists(\"hlundercursor\")?hlundercursor*-1+1:1"<cr> </code></pre><p>удаление переменной не позволит выполнить оператор match и не очистит текущее выделение:</p><pre><code>:unlet hlundercursor </code></pre>

<p>я думаю, что вы действительно хотите следующий плагин от shuhei kubota:</p><p> <a href="http://www.vim.org/scripts/script.php?script\_id=4306">http://www.vim.org/scripts/script.php?script\_id=4306</a> </p><p>согласно описанию: "этот скрипт выделяет слова под курсором, как и многие ide".</p><p>приветствия.</p>

<p>если вы не хотите выделять языковые слова (операторы/препроцессы, такие как <code>if</code>, <code>#define</code>), когда курсор находится на этих словах, вы можете поместить эту функцию в свой <code>.vimrc</code> на основе ответа @too\_much\_php:</p><pre><code>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() </code></pre>

<p>этот вариант оптимизирован для скорости (использует cursorhold вместо cursormoved) и совместимости с <code>hlsearch</code>. текущая подсветка слова поиска не будет нарушена.</p><pre><code>" 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 </code></pre>