Подтвердить что ты не робот

Выделите переменную под курсором в Vim, как в NetBeans

Я работал в NetBeans и любил эту функцию: когда вы помещаете курсор в имя переменной, выделяются все вхождения переменной. Это очень полезно для быстрого поиска всех вступлений переменной. Можно ли добавить это поведение к Vim?

4b9b3361

Ответ 1

Эта автокоманда будет делать то, что вы хотите:

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

vi выделить текущее слово

Изменить: Я использовал группу выделения 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> * #

Это, конечно, не идеально. '* #' немного прыгает...