Wie kann ich alle Vorkommen eines ausgewählten Wortes in GVim wie in Notepad ++ hervorheben?
Wie kann ich alle Vorkommen eines ausgewählten Wortes in GVim wie in Notepad ++ hervorheben?
Antworten:
Im normalen Modus:
:set hlsearch
Dann suchen Sie nach einem Muster mit dem Befehl /
im Normalmodus oder <Ctrl>o
gefolgt von /
im Insert - Modus. *
Im normalen Modus wird nach dem nächsten Vorkommen des Wortes unter dem Cursor gesucht. Die hlsearch
Option hebt alle hervor, falls festgelegt. #
sucht nach dem vorherigen Vorkommen des Wortes.
So entfernen Sie die Markierung der vorherigen Suche:
:nohlsearch
Möglicherweise möchten Sie :nohlsearch<CR>
einem praktischen Schlüssel zuordnen.
*
oder #
von <Ctrl>o
im Normalbetrieb.
:nohlsearch
können Sie einfach verwenden:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
zum Umschalten zwischen Hervorheben und Entfernen von Hervorheben durch <F4>
.
Die *
Taste hebt alle Vorkommen des Wortes hervor, das sich unter dem Cursor befindet.
&hlsearch
ist.
#
.
Ich weiß, dass es eine wirklich alte Frage ist, aber wenn jemand an dieser Funktion interessiert ist, 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
Am einfachsten tippen Sie im normalen Modus *
Ich habe auch diese Zuordnungen zum Aktivieren und 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 ein Wort 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>
Wort mit der Maus auswählen und Vorkommen gleichzeitig zählen: OBS: Beachten Sie, dass in dieser Version am Ende der Befehl "CountWord" steht
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
undnnoremap # #``cgN
*
, wie schalte ich die Markierung aus?
:noh
oder:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
und nnoremap <silent> # :execute "normal! #n"<cr>
? Diese markieren nur das Wort unter dem Cursor, verschieben es jedoch nicht zum nächsten Vorkommen.
Suchbasierte Lösungen ( *, /...) bewegen den Cursor, was unglücklich sein kann.
Eine Alternative besteht darin, das erweiterte mark.vim- Plugin zu verwenden und dann das .vimrc
Doppelklicken auf Trigger-Hervorhebung abzuschließen (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:
:Mark
(bis zur nächsten Auswahl ausschalten):MarkClear
:set noincsearch
. Meiner Meinung nach ist dies eine der nervigsten Funktionen in Vim und eines der ersten Dinge, die ich für Neuinstallationen deaktiviere.
*
wird den Cursor bedingungslos bewegen. Und ich kann nicht sehen, wie incsearch
ärgerlich es sein könnte, da es nur ein Blick nach vorne ist, eine aktuelle Suche durchzuführen, ohne Ihre Position tatsächlich zu ändern.
incsearch
, dass das Ausschalten die Bewegung verhindern würde, aber ein schneller Test bestätigt, dass Sie korrekt sind. Entschuldigen Sie. Es ist jedoch sehr einfach, ein Mapping zu erstellen, das die Bewegung verhindert : :nnoremap * *N
. Ich kann nicht glauben, dass du es nicht tust ärgerlich finden, wenn Ihr Cursor während einer Suche über den gesamten Bildschirm springt. Aber ... diese Dinge sind völlig subjektiv. Vive la différence ;-)
:let @/='hilight_this'
, vorausgesetzt, Sie haben hlsearch
aktiviert. Es hebt Text hervor, ohne zu springen, und Sie müssen vorhandene Einstellungen nicht ändern. Dies ändert den Wert, der aktuell im Suchregister gespeichert ist.
Zuerst (oder in Ihrer .vimrc):
:set hlsearch
Positionieren Sie dann den Cursor über dem Wort, das hervorgehoben werden soll, und drücken Sie *
.
hlsearch
bedeutet, alle Vorkommen der aktuellen Suche hervorzuheben und *
nach dem Wort unter dem Cursor zu suchen.
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 zwischen den Ergebnissen vorwärts zu wechseln, drücken Sie 'n', um rückwärts zu gehen. Drücken Sie 'N'.
Um im normalen Modus eine schnelle Suche nach dem Wort unter dem Cursor durchzuführen 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 dem aufgerufen werden
/searchterm<Enter>
Um Markierungen bei der Verwendung von Okulenzen zu entfernen, habe ich dies an eine Verknüpfung in meiner .vimrc gebunden
:nohl
Aktivieren Sie die Hervorhebung der Suche:
:set hlsearch
Dann suchen Sie nach dem Wort:
/word<Enter>
Mein Favorit dafür ist das mark.vim Plugin. Es ermöglicht die gleichzeitige Hervorhebung mehrerer Wörter in verschiedenen Farben.
Um ein Wort hervorzuheben, ohne den Cursor zu bewegen, ploppieren Sie
" 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.
Das Schöne daran ist g*
und g#
bleibt wie "normal" *
und #
.
Zum hlsearch
Starten können Sie "Kurzform" verwenden (es sei denn, Sie haben eine andere Funktion, die im Befehlsmodus mit "noh" beginnt) : :noh
. Oder Sie können eine lange Version verwenden::nohlsearch
Für extreme Bequemlichkeit (ich schalte hlsearch
vielleicht 20 Mal pro Tag um) können Sie etwas zum Umschalten hlsearch
wie folgt zuordnen :
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. Wenn dies der Fall <leader>
ist \(dies ist standardmäßig der Fall), können Sie \stim normalen Modus (schnell) drücken, um umzuschalten hlsearch
.
Oder vielleicht möchten Sie nur :noh
kartiert haben:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Das obige wird einfach :nohlsearch
so ausgeführt, dass es (anders als :set hlsearch!
) das Wort beim nächsten Drücken *oder #im normalen Modus immer noch hervorhebt .
Prost
Verwenden autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Stellen Sie sicher, dass Sie etwas IncSearch
eingestellt haben. zB 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 flitze. Die Hervorhebungsfarbe stimmt mit der Farbe des Wortes überein, sodass sie mit Ihrem Schema übereinstimmt.
Warum nicht einfach: z /
Dadurch werden das aktuelle Wort unter dem Cursor und alle anderen Vorkommen hervorgehoben. Und Sie müssen nicht für jedes gesuchte Element einen separaten 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 bewegt werden soll. Wenn Sie zwei Dinge visuell vergleichen, möchten Sie oft nicht, dass sich der Cursor bewegt, und es ist ärgerlich, jedes Mal die Taste * zu drücken.
~/.vimrc
Datei ein
" 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%
Im normalen Modell gehen Sie über das Wort.
Drücken Sie * Drücken Sie F8, um rekursiv unter Ihrem gesamten Projekt über das Wort zu suchen
Zum Beispiel diese PlugIns:
Suchen Sie einfach nach unter dem Cursor in vimawesome.com
Der Schlüssel ist, wie bereits erwähnt, dass das Highlight NICHT mit Ihrer Suche in Konflikt steht : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Screenshot davon, wie es NICHT mit der Suche in Konflikt steht: Hinweise:
hlsearch
viel umschalten möchten, möchten Sie möglicherweise:set hlsearch!
statt zuordnen:set nohlsearch
. Dadurch wird die Einstellung umgeschaltet, anstatt sie immer auszuschalten.