Seçilen bir kelimenin tüm tekrarlanması vurgulansın mı?


159

Notepad ++ gibi, GVim'de seçilen bir kelimenin tüm oluşumunu nasıl vurgulayabilirim?

Yanıtlar:


202

Normal modda:

:set hlsearch

Ardından /, Normal modda veya <Ctrl>oardından /Ekle modunda komutla bir desen arayın . *Normal modda, imlecin altındaki kelimenin bir sonraki tekrarını arayacaktır. hlsearchAyarlarsanız seçenek tümü vurgulanacaktır.#sözcüğün önceki oluşumunu arayacaktır.

Önceki aramanın vurgulamasını kaldırmak için:

:nohlsearch

:nohlsearch<CR>Uygun bir anahtarla eşlemek isteyebilirsiniz .


34
Çok şey değiştirmeyi planlıyorsanız, bunun yerine hlsearcheşlemek isteyebilirsiniz . Bu, ayarı her zaman kapatmak yerine değiştirir. :set hlsearch!:set nohlsearch
David Winslow

1
Ayrıca, imlecin sözcüğün önceki (#) veya sonraki (*) oluşumuna geçeceğini unutmayın
Juan Campa

1
Ama sen preslenmiş pozisyona geri dönebilir *ya #göre <Ctrl>onormal modda.
Ruslan

8
Bunun yerine, :nohlsearchkullanabilirsiniz:noh
crisron

Ayarla .vimrc: noremap <F4> :set hlsearch! hlsearch?<CR>açıkton arasında geçiş yapmak ve açıktonu kaldırmak için <F4>.
Chalist

124

*Anahtar imlecin altında kelimenin tüm tekrarlarını vurgulayacaktır.


31
Sadece açıksa &hlsearch.
wilhelmtell

10
Ayrıca imlecin altındaki kelimenin bir sonraki oluşumuna atlayacaktır. Önceki tekrarlamaya atlamak istiyorsanız, düğmesini kullanın #.
Vinicius Pinto

7
Sadece mevcut pozisyonda kalmasını sağlayabilir miyim?
nn0p

@ nn0p Evet yapabilirsiniz - bu durumda kabul edilen cevabı takip edin stackoverflow.com/a/3431203/363688 . Bu sadece tüm olayları vurgulayacak alternatif bir eylemdir.
sleepynate

1
Vurgulanan bir veya daha fazla sözcükle bu işlevi kullanmanın bir yolu var mı?
Sung Cho

22

Gerçekten eski bir soru olduğunu biliyorum, ama birisi bu özellik ile ilgilenen varsa, bu kodu kontrol edebilirsiniz 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
Bu komut dosyasını, z / düğmesine basıldığında başlangıçta vurgulanan imlecin altındaki metin, imleç başka sözcüklere taşınsa bile vurgulanacak şekilde değiştirmek mümkün müdür? Bu, ilk sözcüğü arayan kaynak kodunda gezinirken yararlı olur.
stensootla

18

en basit yol, normal modda yazın *

Ayrıca etkinleştirmek ve devre dışı bırakmak için bu eşlemelerim var

"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

Üzerine tıklayarak kelimeyi seçin

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>

Fare ile sözcük seçme ve bir kerede tekrarlama sayısı: OBS: Bu sürümde sonunda "CountWord" komutunun bulunduğuna dikkat edin

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

Şimdi kullanıyorum nnoremap * *``cgnvennoremap # #``cgN
SergioAraujo

*peki yazdıktan sonra , vurgulamayı nasıl kapatabilirim?
user5359531

Bu belgedeki mevcut kelimeyi vurgulamak için
Chalist

@ user5359531 :nohveya:nohlsearch
dylnmc

@ user5359531 Ne hakkında nnoremap <silent> * :execute "normal! *N"<cr>ve nnoremap <silent> # :execute "normal! #n"<cr>? Bunlar sadece imlecin altındaki kelimeyi vurgular, ancak bir sonraki olaya taşıma.
dylnmc

10

Arama tabanlı çözümler ( *, /...) talihsiz olabilecek imleci hareket ettirir.

Bir alternatif gelişmiş mark.vim eklentisini kullanmaktır , ardından .vimrctetikleyici vurgulamayı çift tıklatmanıza izin vermek için tamamlayın (bir klavye seçiminin bir komutu nasıl tetikleyebileceğini bilmiyorum):

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

Birden fazla vurgu, kalıcılık vb. Sağlar.

Vurgulamayı kaldırmak için:

  • Tekrar çift tıklayın
  • :Mark (bir sonraki seçime kadar kapanır)
  • :MarkClear

2
Arama tabanlı çözümler imleci yalnızca incrememntal arama açıksa hareket ettirir. Böyle kapatabilirsiniz: :set noincsearch. Bence Vim'deki en can sıkıcı özelliklerden biri ve yeni yüklemeler için devre dışı bıraktığım ilk şeylerden biri.
jahroy

3
Sanırım *imleci koşulsuz hareket ettirecek. Ve nasıl incsearchcan sıkıcı olabileceğini göremiyorum , çünkü sadece 'ileriye bak', konumunuzu değiştirmeden geçerli arama gerçekleştiriyor.
YvesgereY

3
Vay be ... Haklısın. Kapatmanın incsearchhareketi engelleyeceğini varsaydım , ancak hızlı bir test doğru olduğunuzu doğruladı. Özür dilerim. Ancak, bu engeller hareketi bir eşleme oluşturmak için süper kolay: :nnoremap * *N. Sana inanamıyorum yok bir arama gerçekleştirmek gibi imleci ekran üzerinde tüm atlar o can sıkıcı bulmak. Ama ... bunlar tamamen öznel. Vive la différence ;-)
jahroy

3
Etkinleştirdiğinizi :let @/='hilight_this'varsayarak da yapabilirsiniz hlsearch. Atlamadan metni vurgular ve mevcut ayarları değiştirmeniz gerekmez. Bu, o anda arama kaydında depolanan değeri değiştirir.
Ben Davis

1
Bu kabul edilen cevap olmalı. <leader> m işi yapar, çift tıklama eşlemeye gerek yoktur.
Sassan

4

İlk olarak (veya .vimrc dosyanızda):

:set hlsearch

Ardından imlecinizi vurgulanmasını istediğiniz sözcüğün üzerine getirin ve tuşuna basın *.

hlsearchgeçerli aramanın tüm örneklerini vurgulamak *ve imlecin altındaki kelimeyi aramak anlamına gelir.


3

Önce aşağıdaki komutu vererek hlsearch'ün etkinleştirildiğinden emin olun

:set hlsearch

Bunu ayrıca .vimrc dosyanıza küme olarak ekleyebilirsiniz

set hlsearch

şimdi hızlı arama mekanizmasını komut modunda veya normal bir arama komutunda kullandığınızda, tüm sonuçlar vurgulanacaktır. Sonuçlar arasında ilerlemek için 'n' tuşuna, geriye gitmek için 'N' tuşuna basın

Normal modda, imlecin altındaki kelimeyi hızlıca aramak ve bir komutta '*' tuşuna basarak bir sonraki tekrarlamaya atlamak için, imleç altındaki kelimeyi arayabilir ve '#' a basarak bir önceki tekrarlamaya geçebilirsiniz. '

Normal modda, hızlı arama

/searchterm<Enter>

ocuurences kullanım vurguları kaldırmak için, bu benim .vimrc bir kısayola bağladım

:nohl

2

Arama vurgulamayı etkinleştir:

:set hlsearch

Ardından kelimeyi arayın:

/word<Enter>


2

imleci hareket ettirmeden sözcüğü vurgulamak için

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

senin vimrc içine.

Bu konuda güzel olan g*ve g#hala "normal" gibi çalışacak *ve #.


Ayarlamak için hlsearch(başka bir işlevi yoksa o komut modunda "Noh" ile başlar) kapalı, sen "kısa formunu" kullanabilirsiniz: :noh. Veya uzun sürümü kullanabilirsiniz::nohlsearch

Aşırı rahatlık için (kendimi hlsearchgünde 20 kez değiştiriyorum ), geçiş yapmak için bir şey eşleyebilirsiniz hlsearch:

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

.:. senin eğer <leader>is \(varsayılan olarak ise) tuşlarına basabilirsiniz \stiçinde (hızlı) Normal geçiş için modhlsearch .

Ya da belki sadece :nohharitaya sahip olmak istersiniz :

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

Yukarıda basitçe çalışır :nohlsearch(benzemiyor :set hlsearch!hala tuşuna kelime dahaki sefere vurgular) *veya #içinde , normal modda.

şerefe



1

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

Bir IncSearchşeye ayarladığınızdan emin olun . örn call s:Attr('IncSearch', 'reverse'). Alternatif olarak, yerine başka bir vurgulama grubu da kullanabilirsiniz.

Bu, imlecinizin altındaki kelimelerin tüm tekrarlarını gecikmeksizin vurgulayacaktır. Ben kod aracılığıyla wizzing zaman bir gecikme beni yavaşlatıyor buluyorum. Vurgu rengi, kelimenin rengiyle eşleşeceğinden, düzeninizle tutarlı kalır.


0

Neden sadece: z /

Bu, imlecin altındaki geçerli sözcüğü ve diğer tüm olayları vurgulayacaktır. Ayrıca, aradığınız her öğe için ayrı bir komut vermek zorunda değilsiniz. Belki de bu kutsal olmayan gvim'de mevcut değildir? Varsayılan olarak vim'dir.

* yalnızca imlecin bir sonraki tekrarlamaya geçmesini istiyorsanız iyidir. İki şeyi görsel olarak karşılaştırırken genellikle imlecin hareket etmesini istemezsiniz ve her seferinde * tuşuna basmak can sıkıcıdır.


Vim ve gvim normalde aynı komut kümesine sahiptir. Yardım belgelerinde "z /" komutuna başvuru yoktur.
wds

Sadece gvim'de değil, aynı zamanda vim'de de mevcuttur. Sadece kontrol ettim - açıkça çalışmıyor.
Ruslan

z / , daha önceki bir yanıtta bahsedilen bu komut dosyası kullanıldığında çalışır.
fzzylogic

0
  1. Bu satırları ~/.vimrcdosyanıza ekleyin

" 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. Ayarları tekrar yükle :so%
  2. Normal modelde kelimenin üzerine gidin.

  3. Tüm projenizi kelime üzerinde yinelemeli olarak aramak için * F8 tuşuna basın


0

Örneğin bu eklenti:

Sadece aramak imlecin altındaki içinde vimawesome.com

Anahtar clagccs belirtildiği gibi , vurgu vurgulamak aramanızla çelişmez : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle

Arama ile nasıl ÇATIŞMADIĞININ ekran görüntüsü: resim açıklamasını buraya girin Notlar:

  • vim-illuminate vurguları varsayılan olarak, ekran görüntümde alt çizgiye geçtim
  • vim-illuminate varsayılan olarak imlecin altındaki kelimeyi vurgular / altını çizer, ekran görüntümde ayarını kaldırırım
  • Benim renk kimyasallarım çok gri-ish. Özelleştirmek için sizinkini de kontrol edin.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.