Как выделить все вхождения выбранного слова в GVim, как в Notepad ++?
Как выделить все вхождения выбранного слова в GVim, как в Notepad ++?
Ответы:
В обычном режиме:
:set hlsearch
Затем выполните поиск шаблона с помощью команды /
в обычном режиме или с <Ctrl>o
последующим /
в режиме вставки. *
в обычном режиме будет искать следующее вхождение слова под курсором. hlsearch
Вариант будет выделить все из них , если установлен. #
будет искать предыдущее вхождение слова.
Чтобы удалить выделение предыдущего поиска:
:nohlsearch
Возможно, вы захотите сопоставить :nohlsearch<CR>
с каким-нибудь удобным ключом.
*
или #
на <Ctrl>o
в нормальном режиме.
:nohlsearch
вы можете просто использовать:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
для переключения между выделением и удалением выделения по <F4>
.
*
Ключ будет выделить все вхождения слова , который находится под курсором.
&hlsearch
включен.
#
.
Я знаю, что это действительно старый вопрос, но если кто-то заинтересован в этой функции, можете проверить этот код http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle
" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
let @/ = ''
if exists('#auto_highlight')
au! auto_highlight
augroup! auto_highlight
setl updatetime=4000
echo 'Highlight current word: off'
return 0
else
augroup auto_highlight
au!
au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
augroup end
setl updatetime=500
echo 'Highlight current word: ON'
return 1
endif
endfunction
самый простой способ, наберите в обычном режиме *
У меня также есть эти сопоставления для включения и отключения
"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
Выберите слово, нажав на него
set mouse=a "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
Бонус: 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>
Выделение слова с помощью мыши и одновременный подсчет вхождений: OBS: обратите внимание, что в этой версии у нас есть команда «CountWord» в конце
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
иnnoremap # #``cgN
*
, как я наберу , как отключить подсветку?
:noh
или:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
а nnoremap <silent> # :execute "normal! #n"<cr>
? Они просто выделяют слово под курсором, но не перемещают его в следующий раз.
Решения на основе поиска ( *, /...) перемещают курсор, что может быть неудачно.
Альтернативный вариант - использовать улучшенный плагин mark.vim , а затем завершить его, .vimrc
чтобы дважды щелкнуть подсветку триггера (я не знаю, как выбор клавиатуры может вызвать команду):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Это позволяет многократные выделения, постоянство и т. Д.
Чтобы удалить выделение, либо:
:Mark
(выключить до следующего выбора):MarkClear
:set noincsearch
. На мой взгляд, это одна из самых раздражающих функций в Vim и одна из первых вещей, которые я отключаю для новых установок.
*
безоговорочно переместит курсор. И я не могу понять, как это incsearch
может раздражать, поскольку это всего лишь «взгляд вперед», выполняющий текущий поиск без фактического изменения вашей позиции.
incsearch
предотвратит движение, но быстрый тест подтвердит, что вы правы. Мои извинения. Тем не менее, это очень легко создать отображение , которое предотвращает движение: :nnoremap * *N
. Я не могу поверить, что вас не раздражает, что ваш курсор перемещается по экрану во время поиска. Но ... эти вещи абсолютно субъективны. Vive la différence ;-)
:let @/='hilight_this'
, если вы hlsearch
включили. Он подсвечивает текст без прыжков, и вам не нужно менять существующие настройки. Это изменяет значение, которое в данный момент хранится в регистре поиска.
Сначала (или в вашем .vimrc):
:set hlsearch
Затем поместите курсор на слово, которое вы хотите выделить, и нажмите *
.
hlsearch
означает выделить все вхождения текущего поиска, а также *
означает поиск слова под курсором.
Сначала убедитесь, что hlsearch включен, введя следующую команду
:set hlsearch
Вы также можете добавить это в свой файл .vimrc как установлено
set hlsearch
теперь, когда вы используете механизм быстрого поиска в командном режиме или обычную команду поиска, все результаты будут выделены. Для перемещения вперед между результатами нажмите «n», для перемещения назад нажмите «N»
В обычном режиме, чтобы выполнить быстрый поиск слова под курсором и перейти к следующему вхождению одной командой, нажмите «*», вы также можете найти слово под курсором и перейти к предыдущему вхождению, нажав «#». '
В обычном режиме быстрый поиск также может быть вызван с помощью
/searchterm<Enter>
чтобы убрать блики при использовании ocuurences, я привязал это к ярлыку в моем .vimrc
:nohl
Включить подсветку поиска:
:set hlsearch
Затем найдите слово:
/word<Enter>
Мой любимый для этого плагин mark.vim . Это позволяет выделять несколько слов разными цветами одновременно.
выделить слово без перемещения курсора, хлопнуть
" 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>
в ваш vimrc.
Что хорошо в этом, так это g*
и g#
будет работать как "нормально" *
и #
.
Для hlsearch
запуска вы можете использовать «short-form» (если у вас нет другой функции, которая начинается с «noh» в командном режиме)::noh
. Или вы можете использовать длинную версию::nohlsearch
Для чрезвычайного удобства (я переключаюсь, hlsearch
может быть, 20 раз в день), вы можете сопоставить что-то с переключателем hlsearch
следующим образом:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. если ваш <leader>
есть \(это по умолчанию), вы можете нажать \st(быстро) в нормальном режиме для переключения hlsearch
.
Или, может быть, вы просто хотите :noh
составить карту:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Вышеприведенное просто работает :nohlsearch
так, что (в отличие от :set hlsearch!
) оно все равно выделит слово при следующем нажатии *или #в обычном режиме.
ура
использование autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Убедитесь, что вы что-то IncSearch
настроили. например call s:Attr('IncSearch', 'reverse')
. В качестве альтернативы вы можете использовать другую группу подсветки.
Это выделит все вхождения слов под вашим курсором без задержки. Я обнаружил, что задержка замедляет меня, когда я просматриваю код. Цвет выделения будет соответствовать цвету слова, поэтому он будет соответствовать вашей схеме.
Почему бы просто: z /
Это выделит текущее слово под курсором и любые другие вхождения. И вам не нужно давать отдельную команду для каждого элемента, который вы ищете. Возможно это не доступно в нечестивом гвиме? По умолчанию это vim.
* хорошо, только если вы хотите, чтобы курсор перемещался к следующему вхождению. При визуальном сравнении двух вещей вы часто не хотите, чтобы курсор двигался, и раздражает нажатие клавиши * каждый раз.
~/.vimrc
файл
" highlight the searched items
set hlsearch
" F8 search for word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
:so%
В обычной модели перебери слово.
Нажмите * Нажмите F8 для рекурсивного поиска по всему вашему проекту над словом
Например, это плагины:
Просто найдите под курсором в vimawesome.com
Ключ, как упоминалось в clagccs , заключается в том, что выделение НЕ конфликтует с вашим поиском : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Снимок экрана: как это НЕ конфликтует с поиском: Примечания:
hlsearch
много, вы можете:set hlsearch!
вместо карты:set nohlsearch
. Это переключает настройку, а не всегда выключает ее.