Виділити все виникнення вибраного слова?


Відповіді:


202

У звичайному режимі:

:set hlsearch

Потім знайдіть шаблон за допомогою команди /в звичайному режимі або <Ctrl>oдалі /в режимі «Вставка». *у звичайному режимі буде шукати наступне слово під курсором. Цей hlsearchпараметр виділить їх усі, якщо вони встановлені. #буде шукати попереднє виникнення цього слова.

Щоб видалити підсвітку попереднього пошуку:

:nohlsearch

Ви можете :nohlsearch<CR>скористатися зручним ключем.


34
Якщо ви плануєте hlsearchбагато вмикати, ви можете :set hlsearch!замість цього зробити карту :set nohlsearch. Це перемикає налаштування, а не завжди його вимикає.
Девід Уінслоу

1
Також пам’ятайте, що курсор переміститься до попереднього (#) або наступного (*) появи слова
Хуан Кампа

1
Але ви можете повернутися до місця , де була натиснута кнопка *або #на <Ctrl>oв нормальному режимі.
Руслан

8
Замість цього :nohlsearchви можете просто скористатися:noh
crisron

Встановити .vimrc: noremap <F4> :set hlsearch! hlsearch?<CR>для перемикання між виділенням та видаленням підсвічування на <F4>.
Chalist

124

The *Ключ буде виділити всі входження слова , який знаходиться під курсором.


31
Тільки якщо &hlsearchвін увімкнено.
wilhelmtell

10
Він також перейде до наступного появи слова під курсором. Якщо ви хочете перейти до попереднього явища, використовуйте #.
Вініцій Пінто

7
Чи можу я змусити його просто залишитися на поточній посаді?
nn0p

@ nn0p Так, ви можете - у такому випадку дотримуйтесь прийнятої відповіді stackoverflow.com/a/3431203/363688 . Це лише альтернативна дія, яка також висвітлить усі події.
сонник

1
чи є спосіб використовувати цю функціональність, але з виділеним одним або декількома словами?
Сун Чо

22

Я знаю, ніж це дійсно давнє запитання, але якщо когось цікавить ця функція, можна перевірити цей код 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

1
Чи можливо змінити цей скрипт таким чином, щоб текст під курсором, який спочатку виділяється при натисканні z /, залишався виділеним, навіть коли курсор переміщений на інші слова? Це було б корисно при прокручуванні вихідного коду для пошуку початкового слова.
stensootla

18

найпростіший спосіб - введіть у звичайному режимі *

У мене також є ці відображення для включення та відключення

"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
SergioAraujo

тому після введення тексту *як вимкнути виділення?
користувач5359531

Це для виділення поточного слова в документі
Chalist

@ user5359531 :nohабо:nohlsearch
dylnmc

@ user5359531 про що nnoremap <silent> * :execute "normal! *N"<cr>і nnoremap <silent> # :execute "normal! #n"<cr>? Вони просто виділяють слово під курсором, але не переносять його на наступне виникнення.
dylnmc

10

Пошук на основі рішень ( *, /...) переміщує курсор, що може бути невдалим.

Альтернативою є використання розширеного плагіна mark.vim , а потім доповніть.vimrc підсвічування тригера подвійним клацанням (я не знаю, як вибір клавіатури може викликати команду):

"Use Mark plugin to highlight selected word  
map <2-leftmouse> \m   

Це дозволяє багаторазове виділення, стійкість тощо.

Щоб видалити виділення:

  • Двічі клацніть ще раз
  • :Mark (вимикається до наступного вибору)
  • :MarkClear

2
Рішення на основі пошуку переміщують курсор лише у тому випадку, якщо включений поступовий пошук. Ви можете відключити його , як це: :set noincsearch. На мою думку, це одна з найприємніших особливостей Vim і одна з перших речей, які я відключаю для нових установок.
jahroy

3
Думаю *, беззастережно переміщуватиме курсор. І я не бачу, як це incsearchможе бути прикро, оскільки це лише "погляд вперед", здійснення поточного пошуку без фактичної зміни вашої позиції.
YvesgereY

3
Нічого ... Ти маєш рацію. Я припускав, що вимкнення incsearchперешкоджатиме руху, але швидкий тест підтверджує, що ви правильні. Мої вибачення. Тим НЕ менше, це дуже легко створити відображення , яке запобігає рух: :nnoremap * *N. Я не можу повірити, що вам не прикро, що ваш курсор стрибає по всьому екрану під час пошуку. Але ... ці речі є абсолютно суб'єктивними. Vive la différence ;-)
jahroy

3
Ви також можете зробити це :let @/='hilight_this', якщо hlsearchувімкнути. Він виділяє текст без стрибків, і вам не доведеться змінювати існуючі налаштування. Це змінює значення, яке наразі зберігається в реєстрі пошуку.
Бен Девіс

1
Це має бути прийнятою відповіддю. <leader> m виконує роботу, немає необхідності у зіставленні подвійного клацання.
Сассан

4

Спочатку (або у вашому .vimrc):

:set hlsearch

Потім розташуйте курсор над словом, яке потрібно виділити, і натисніть *.

hlsearchозначає виділити всі випадки поточного пошуку та *означає пошук слова під курсором.


3

Спочатку переконайтеся, що hlsearch увімкнено, видавши наступну команду

:set hlsearch

Ви також можете додати це до файлу .vimrc як встановлено

set hlsearch

тепер, коли ви використовуєте механізм швидкого пошуку в командному режимі або звичайну команду пошуку, всі результати будуть виділені. Щоб рухатись вперед між результатами, натисніть "n", щоб переміститись назад, натисніть "N"

У звичайному режимі для швидкого пошуку слова під курсором та переходу до наступного явища однією командою натисніть "*", ви також можете шукати слово під курсором та переходити до попереднього явища, натискаючи "# '

У звичайному режимі швидкий пошук також можна викликати за допомогою

/searchterm<Enter>

щоб видалити яскраві моменти використання окурансу, я пов’язав це із ярликом у своєму .vimrc

:nohl



2

щоб виділити слово без переміщення курсору, плюхтуйте

" 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відключення можна скористатися "короткою формою" (якщо у вас немає іншої функції, яка починається з "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!нього), воно все одно виділить слово наступного разу, коли ви натиснете *або #в звичайному режимі.

ура



1

Використовуйте autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))

Переконайтесь, що ви IncSearchщось встановили. напр call s:Attr('IncSearch', 'reverse'). Крім того, ви можете використовувати іншу групу виділень на її місці.

Це дозволить виділити всі випадки слів під курсором без зволікань. Я вважаю, що затримка сповільнює мене, коли я переглядаю код. Колір виділення буде відповідати кольорові слова, тому він буде відповідати вашій схемі.


0

Чому б не просто: z /

Це виділить поточне слово під курсором та будь-які інші події. І не потрібно давати окрему команду для кожного елемента, який ви шукаєте. Можливо, це не доступно в нечестивому гвімі? За замовчуванням це vim.

* добре, лише якщо ви хочете, щоб курсор перейшов до наступного явища. При візуальному порівнянні двох речей ви часто не хочете, щоб курсор переміщувався, і дратує натискання клавіші * кожен раз.


Vim і gvim зазвичай мають однаковий набір команд. У довідкових документах немає посилання на команду "z /".
wds

Він недоступний не лише у gvim, але і vim. Просто перевірив це - очевидно, не працює.
Руслан

z / працює, коли цей сценарій, згаданий у попередній відповіді , використовується.
fzzylogic

0
  1. Додайте ці рядки у свій ~/.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>

  1. Перезавантажте налаштування за допомогою :so%
  2. У звичайній моделі перейдіть слово.

  3. Натисніть * Натисніть F8, щоб рекурсивно шукати весь проект над словом


0

Наприклад, цей плагін:

Просто шукайте під курсором у vimawesome.com

Ключовим словом , як згадували clagccs , є те, що виділення НЕ суперечить вашому пошуку : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle

Знімок екрана, як це НЕ суперечить пошуку: введіть тут опис зображення Примітки:

  • vim-висвітлює підсвічування за замовчуванням, в екрані екрана я перейшов на підкреслення
  • vim-висвітлює підсвічування / підкреслює слово під курсором за замовчуванням, у екрані знімаю його
  • мої кольорові схеми дуже сірі. Перевірте своє, щоб також налаштувати його.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.