Я работал в NetBeans и любил эту функцию: когда вы помещаете курсор в имя переменной, выделяются все вхождения переменной. Это очень полезно для быстрого поиска всех вступлений переменной. Можно ли добавить это поведение к Vim?
Выделите переменную под курсором в Vim, как в NetBeans
Ответ 1
Эта автокоманда будет делать то, что вы хотите:
:autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Изменить: Я использовал группу выделения IncSearch
в моем примере, но вы можете найти другие цвета для использования, выполнив эту команду:
:so $VIMRUNTIME/syntax/hitest.vim
Ответ 2
Если вы установили
:set hlsearch
чтобы выделить все вхождения шаблона поиска, а затем использовать *
или #
, чтобы найти вхождения слова под вашим курсором, который даст вам какой-то путь к тому, что вы хотите. Однако я думаю, что подсветка переменных, поддерживающих синтаксис, выходит за рамки VIM.
Ответ 3
Этот оператор позволяет включать/отключать переменную, выделяя все вхождения слова под курсором:
: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>
Удаление переменной предотвратит выполнение оператора соответствия и не очистит текущую подсветку:
:unlet HlUnderCursor
Ответ 4
Если вы не хотите выделять слова языка (инструкции/препрограммы, такие как 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()
Ответ 5
Я думаю, что вам действительно нужен следующий плагин Shuhei Kubota:
http://www.vim.org/scripts/script.php?script_id=4306
В соответствии с описанием: "Этот script выделяет слова под курсором, как многие IDE. '
Приветствия.
Ответ 6
Этот вариант оптимизирован для скорости (использует CursorHold вместо CursorMoved) и совместимости с 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
Ответ 7
vim_current_word
работает из коробки, поддерживает синтаксис и позволяет настраивать цвета.
Ответ 8
Чтобы отобразить F2 для переключения подсветки:
map <F2> :set hlsearch!<CR> * #
Это, конечно, не идеально. '* #' немного прыгает...