Як я можу виділити все виникнення вибраного слова в GVim, як у Блокноті ++?
Як я можу виділити все виникнення вибраного слова в GVim, як у Блокноті ++?
Відповіді:
У звичайному режимі:
:set hlsearch
Потім знайдіть шаблон за допомогою команди /
в звичайному режимі або <Ctrl>o
далі /
в режимі «Вставка». *
у звичайному режимі буде шукати наступне слово під курсором. Цей hlsearch
параметр виділить їх усі, якщо вони встановлені. #
буде шукати попереднє виникнення цього слова.
Щоб видалити підсвітку попереднього пошуку:
:nohlsearch
Ви можете :nohlsearch<CR>
скористатися зручним ключем.
*
або #
на <Ctrl>o
в нормальному режимі.
:nohlsearch
ви можете просто скористатися:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
для перемикання між виділенням та видаленням підсвічування на <F4>
.
The *
Ключ буде виділити всі входження слова , який знаходиться під курсором.
&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>
щоб видалити яскраві моменти використання окурансу, я пов’язав це із ярликом у своєму .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
відключення можна скористатися "короткою формою" (якщо у вас немає іншої функції, яка починається з "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
. Це перемикає налаштування, а не завжди його вимикає.