web-dev-qa-db-de.com

Alles Vorkommen eines ausgewählten Wortes markieren?

Wie kann ich alle Vorkommen eines ausgewählten Wortes in GVim wie in Notepad ++ hervorheben?

139
Matteo Cocon

Im normalen Modus:

:set hlsearch

Suchen Sie dann mit dem Befehl / Im Normalmodus oder <Ctrl>o Gefolgt von / Im Einfügemodus nach einem Muster. * Im normalen Modus sucht nach dem nächsten Vorkommen des Wortes unter dem Cursor. Die Option hlsearch hebt alle hervor, wenn sie festgelegt sind. # Sucht nach dem vorherigen Vorkommen des Wortes.

So entfernen Sie die Hervorhebung der vorherigen Suche:

:nohlsearch

Möglicherweise möchten Sie :nohlsearch<CR> Einem geeigneten Schlüssel zuordnen.

180
wilhelmtell

Die Taste * Hebt alle Vorkommen des Wortes hervor, das sich unter dem Cursor befindet.

105
sleepynate

Ich weiß, dass es eine sehr alte Frage ist, aber wenn sich jemand für diese Funktion interessiert, kann er diesen Code überprüfen 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
22
clagccs

am einfachsten tippe im normalen modus *

Ich habe auch diese Zuordnungen zu aktivieren und zu deaktivieren

"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

Wählen Sie Word aus, indem Sie darauf klicken

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>

Auswählen von Word mit der Maus und sofortiges Zählen von Vorkommen: OBS: Beachten Sie, dass in dieser Version der Befehl "CountWord" am Ende steht

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

Suchbasierte Lösungen (*/...) bewege den Cursor, was unglücklich sein kann.

Alternativ können Sie das enhanced mark.vim Plugin verwenden und dann Ihr .vimrc, um das Hervorheben durch Doppelklicken auszulösen (ich weiß nicht, wie eine Tastaturauswahl einen Befehl auslösen kann):

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

Es ermöglicht mehrere Hervorhebungen, Persistenz usw.

So entfernen Sie Hervorhebungen:

  • Doppelklicken Sie erneut
  • :Mark (bis zur nächsten Auswahl ausschalten)
  • :MarkClear
9
YvesgereY

Zuerst (oder in Ihrer .vimrc):

:set hlsearch

Positionieren Sie dann den Mauszeiger über das Wort, das Sie hervorheben möchten, und drücken Sie *.

hlsearch bedeutet, dass alle Vorkommen der aktuellen Suche hervorgehoben werden und * bedeutet Suche nach dem Wort unter dem Cursor.

3
Ned Batchelder

Suchhervorhebung aktivieren:

:set hlsearch

Dann suche nach dem Wort:

/Word<Enter>
2
John Kugelman

Mein Favorit dafür ist das mark.vim Plugin. Es ermöglicht das gleichzeitige Hervorheben mehrerer Wörter in verschiedenen Farben.

Beispiel Screenshot

2
Habi
set hlsearch

vielleicht ?

1
Rook

Stellen Sie zunächst sicher, dass hlsearch aktiviert ist, indem Sie den folgenden Befehl eingeben

:set hlsearch

Sie können dies auch wie festgelegt zu Ihrer .vimrc-Datei hinzufügen

set hlsearch

wenn Sie jetzt den Schnellsuchmechanismus im Befehlsmodus oder einen regulären Suchbefehl verwenden, werden alle Ergebnisse hervorgehoben. Um vorwärts zwischen den Ergebnissen zu wechseln, drücken Sie 'n', um rückwärts zu wechseln, drücken Sie 'N'.

Um im normalen Modus schnell nach dem Wort unter dem Cursor zu suchen und mit einem Befehl zum nächsten Vorkommen zu springen, drücken Sie '*'. Sie können auch nach dem Wort unter dem Cursor suchen und zum vorherigen Vorkommen wechseln, indem Sie '#' drücken. '

Im normalen Modus kann die Schnellsuche auch mit der Taste aufgerufen werden

/searchterm<Enter>

um Glanzlichter bei der Verwendung von Ocuurences zu entfernen, habe ich dies mit einer Verknüpfung in meiner .vimrc verknüpft

:nohl
1
kashif

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

Stellen Sie sicher, dass Sie IncSearch auf etwas eingestellt haben. z.B. call s:Attr('IncSearch', 'reverse'). Alternativ können Sie stattdessen eine andere Markierungsgruppe verwenden.

Dadurch werden alle Vorkommen von Wörtern unter Ihrem Cursor unverzüglich hervorgehoben. Ich stelle fest, dass mich eine Verzögerung verlangsamt, wenn ich durch den Code scrolle. Die Hervorhebungsfarbe stimmt mit der Farbe des Wortes überein, sodass sie mit Ihrem Schema übereinstimmt.

1
Seph

um Word zu markieren, ohne den Cursor zu bewegen, plopp

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

in dein vimrc.

Was ist schön daran ist g* und g# funktioniert weiterhin wie "normal" * und #.


Zum Deaktivieren von hlsearch können Sie "Kurzform" verwenden (es sei denn, Sie haben eine andere Funktion, die im Befehlsmodus mit "noh" beginnt): :noh. Oder Sie können lange Version verwenden: :nohlsearch

Aus Gründen der Bequemlichkeit (ich schalte hlsearch vielleicht 20 Mal pro Tag um) können Sie hlsearch folgendermaßen umschalten:

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

.:. wenn dein <leader> ist \ (Standardmäßig) können Sie drücken \st (schnell) in normal Modus um hlsearch umzuschalten.

Oder vielleicht willst du nur :noh abgebildet:

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

Das obige läuft einfach :nohlsearch also (im Gegensatz zu :set hlsearch!) Wenn Sie das nächste Mal auf drücken, wird Word immer noch hervorgehoben * oder # im normalen Modus.

prost

1
dylnmc
  1. Fügen Sie diese Zeilen in Ihr ~/.vimrc Datei

" 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. Laden Sie die Einstellungen mit :so%
  2. Im normalen Modell über das Wort gehen.

  3. Drücken Sie * Drücken Sie F8, um Ihr gesamtes Projekt rekursiv über das Wort zu durchsuchen

0
Yordan Georgiev

Warum nicht einfach: z /

Dadurch wird das aktuelle Wort unter dem Cursor und alle anderen Vorkommen hervorgehoben. Und Sie müssen nicht für jedes gesuchte Objekt einen eigenen Befehl eingeben. Vielleicht ist das in der unheiligen Gvim nicht verfügbar? Es ist standardmäßig in vim.

* ist nur dann gut, wenn der Cursor zum nächsten Vorkommen springen soll. Wenn Sie zwei Dinge visuell vergleichen, möchten Sie häufig nicht, dass sich der Cursor bewegt, und es ist ärgerlich, jedes Mal die Taste * zu drücken.

0
INL