Highlight all occurrence of a selected word?

后端 未结 15 1636
难免孤独
难免孤独 2020-12-12 10:05

How can I highlight all occurrence of a selected word in GVim, like in Notepad++?

相关标签:
15条回答
  • 2020-12-12 10:11
    set hlsearch
    

    maybe ?

    0 讨论(0)
  • 2020-12-12 10:12

    First ensure that hlsearch is enabled by issuing the following command

    :set hlsearch
    

    You can also add this to your .vimrc file as set

    set hlsearch
    

    now when you use the quick search mechanism in command mode or a regular search command, all results will be highlighted. To move forward between results, press 'n' to move backwards press 'N'

    In normal mode, to perform a quick search for the word under the cursor and to jump to the next occurrence in one command press '*', you can also search for the word under the cursor and move to the previous occurrence by pressing '#'

    In normal mode, quick search can also be invoked with the

    /searchterm<Enter>
    

    to remove highlights on ocuurences use, I have bound this to a shortcut in my .vimrc

    :nohl
    
    0 讨论(0)
  • 2020-12-12 10:12

    to highlight word without moving cursor, plop

    " highlight reg. ex. in @/ register
    set hlsearch
    " remap `*`/`#` to search forwards/backwards (resp.)
    " w/o moving cursor
    nnoremap <silent> * :execute "normal! *N"<cr>
    nnoremap <silent> # :execute "normal! #n"<cr>
    

    into your vimrc.

    What's nice about this is g* and g# will still work like "normal" * and #.


    To set hlsearch off, you can use "short-form" (unless you have another function that starts with "noh" in command mode): :noh. Or you can use long version: :nohlsearch

    For extreme convenience (I find myself toggling hlsearch maybe 20 times per day), you can map something to toggle hlsearch like so:

    " search highlight toggle
    nnoremap <silent> <leader>st :set hlsearch!<cr>
    

    .:. if your <leader> is \ (it is by default), you can press \st (quickly) in normal mode to toggle hlsearch.

    Or maybe you just want to have :noh mapped:

    " search clear
    nnoremap <silent> <leader>sc :nohlsearch<cr>
    

    The above simply runs :nohlsearch so (unlike :set hlsearch!) it will still highlight word next time you press * or # in normal mode.

    cheers

    0 讨论(0)
  • 2020-12-12 10:15

    For example this plugIns:

    • https://github.com/rrethy/vim-illuminate

    • https://github.com/itchyny/vim-cursorword

    Just search for under cursor in vimawesome.com

    The key, as clagccs mentioned, is that the highlight does NOT conflict with your search: https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle

    Screen-shot of how it does NOT conflict with search: Notes:

    • vim-illuminate highlights by default, in my screen-shot I switched to underline
    • vim-illuminate highlights/underlines word under cursor by default, in my screen-shot I unset it
    • my colorschemes are very grey-ish. Check yours to customize it too.
    0 讨论(0)
  • 2020-12-12 10:17

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

    Make sure you have IncSearch set to something. e.g call s:Attr('IncSearch', 'reverse'). Alternatively you can use another highlight group in its place.

    This will highlight all occurrences of words under your cursor without a delay. I find that a delay slows me down when I'm wizzing through code. The highlight color will match the color of the word, so it stays consistent with your scheme.

    0 讨论(0)
  • 2020-12-12 10:18

    the simplest way, type in normal mode *

    I also have these mappings to enable and disable

    "highligh search enabled by default
    set hlsearch
    "now you can toggle it
    nnoremap <S-F11> <ESC>:set hls! hls?<cr>
    inoremap <S-F11> <C-o>:set hls! hls?<cr>
    vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv
    

    Select word by clickin on it

    set mouse=a     "Enables mouse click
    nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
    

    Bonus: CountWordFunction

    fun! CountWordFunction()
        try
            let l:win_view = winsaveview()
            let l:old_query = getreg('/')
            let var = expand("<cword>")
            exec "%s/" . var . "//gn"
        finally
            call winrestview(l:win_view)
            call setreg('/', l:old_query)
        endtry
    endfun
    " Bellow we set a command "CountWord" and a mapping to count word
    " change as you like it
    command! -nargs=0 CountWord :call CountWordFunction()
    nnoremap <f3> :CountWord<CR>
    

    Selecting word with mouse and counting occurrences at once: OBS: Notice that in this version we have "CountWord" command at the end

    nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
    
    0 讨论(0)
提交回复
热议问题