Come posso cancellare l'evidenziazione delle parole nel documento corrente (ad es. Dopo aver cercato una parola)?


61

Quando cerchi una parola in un file con qualcosa del genere /console.log, tutte le istanze di console.logvengono evidenziate.

Quando non ti interessano più, l'evidenziazione può essere fonte di distrazione. La mia attuale strategia per rimuovere l'evidenziazione è fare qualcosa di simile /asntehua. Esiste un modo corretto per rimuovere l'evidenziazione di questa parola?


2
Non c'è niente di più veloce da scrivere di /skldafjlksjdf;)
— Shahbaz,

2
Aggiungere la seguente al vostro .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Premi Invio in modalità comando e l'evidenziazione scompare.
— nilon,

Risposte:


47

In alternativa :noh, mi piace :let @/=""mappare una scorciatoia da tastiera.

La differenza è che :nohlascia il termine di ricerca nel registro di ricerca, quindi ne Nin modalità normale riprendi la ricerca saltando alla corrispondenza precedente / successiva e ri-evidenziando. L'uso :let @/="", d'altra parte, provoca il messaggio E25: No previous regular expressione lascia il cursore dov'era , il che è particolarmente conveniente se non lo sai ancora ctrl- oancora e accidentalmente colpito n.

Questo può essere usato anche nell'altro modo. Per fare in modo che vim evidenzi un po 'di testo senza saltare ad esso, puoi farlo:let @/="some text"

In queste espressioni, @ consente di fare riferimento a un registro e @ / è il registro che contiene l'ultimo modello di ricerca.


31

Digita semplicemente

:noh<cr>

(Dove <cr>simboleggia un ritorno a capo, ovvero Invio.) La versione completa non abbreviata di questo comando è :nohlsearch.

Per comodità, puoi avere una mappatura come

nnoremap <Leader><space> :noh<cr>

nel tuo .vimrc. Dato che il mio leader è lo spazio, questo mi permette di cancellare l'evidenziazione semplicemente toccando due volte lo spazio. (Per impostazione predefinita, <Leader>è impostato su \)

Un'altra opzione popolare è quella di associarlo a Ctrl+ L, poiché questo è più o meno il valore predefinito per "schermata del terminale ridisegnata", che è più o meno quello che stai facendo:

nnoremap <silent> <C-L> :nohlsearch<CR><C-L>

Questo ha l'effetto collaterale anche ridisegnare schermo del terminale, che può essere lenta se la connessione terminale è lento (che è molto raro questi giorni).
NOTA: se stai usando tpope / vim-sensibile , offre già la <C-l>mappatura sopra elencata.


21

Disabilita in modo permanente l'evidenziazione della ricerca

Le corrispondenze non verranno evidenziate ogni volta che esegui una ricerca utilizzando /

:set nohlsearch

Cancella evidenziazione fino alla prossima ricerca

:noh

o :nohlsearch(cancella fino a quando no Nviene premuto o viene eseguita una ricerca fresca)


Evidenziare l'evidenziazione premendo ESC

nnoremap <esc> :noh<return><esc>

Evidenzia l'evidenziazione premendo un altro tasto o una mappa personalizzata

  • Evidenzia evidenzia premendo \(barra rovesciata)

    nnoremap \ :noh<return>
    
  • Evidenzia i punti salienti colpendo ESCdue volte

    nnoremap <esc><esc> :noh<return>
    

Ho aggiunto nnoremap <esc> :noh<return><esc>al mio vimrcma non funziona. Ho jkmappato per fuggire, potrebbe essere perché?
— mbigras

Cosa sta succedendo esattamente? Forse hai disabilitato la ESCchiave?
— Sheharyar

la pressione jknon disattiva il testo evidenziato (ma funziona ancora come Esc). Premendo my Escin alto a sinistra sulla tastiera, il testo evidenziato viene disattivato.
— mbigras

Quindi hai la tua risposta proprio lì. Metti la tua jkmappa sotto la ESCmappa e assicurati di utilizzare un semplice mapinvece dinoremap
— Sheharyar

La rimappatura di escape può causare problemi con i tasti freccia e presumo altri scenari che utilizzano un codice di escape. vi.stackexchange.com/questions/11144/…
— Rob Mosher,

2

Dopo aver provato diverse soluzioni suggerite per le scorciatoie per questo in ~ / vimrc, ho deciso di aggiungere semplicemente nmap <esc><esc> :noh<return>ad esso. La doppia fuga impedisce l'interferenza con la funzione dei tasti freccia. Se sei in modalità inserimento, è necessaria una tripla fuga. Questo è veloce da eseguire e facile da ricordare.


2

Ho aggiunto un autocmd al mio .vimrc che rimuove l'evidenziazione ogni volta che si entra nella modalità di inserimento.

 autocmd InsertEnter * :let @/=""

2
Usare nohlinvece di let @/=""sarebbe un approccio migliore, da allora non ostruisci la tua ricerca attuale.
— Jamessan,

@jamessan funziona con il :let @/=""comando ma autocmd InsertEnter * :nohnon per qualche motivo, hai idea del perché?
— tobek,

1
In realtà ho trovato il motivo: secondo i documenti 'L'evidenziazione della ricerca non può essere disattivata con ": nohlsearch" in un autocommand' - dettagli del perché: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
— tobek

1

Se non desideri evidenziare dopo alcuna ricerca, puoi utilizzare questo (meglio):

:set nohls

o questo (peggio):

:hi Search NONE

1

Quando ho digitato :help incsearch, ho trovato quanto segue nel manuale:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

che mi sono rassegnato ad usare dal momento che altre soluzioni che ho provato non erano perfette e questa soluzione viene "direttamente dalla bocca del cavallo", per così dire. Evidenzia tutte le corrispondenze di ricerca nella finestra corrente.


1
/asdfasdf

Questo ha il vantaggio di non doverlo digitare esattamente. Lo svantaggio è che esiste una probabilità circa 1: 68719476736 in un file di 4096 byte che ciò non funziona e il cursore salterà in una posizione diversa. Questa possibilità aumenta per file più grandi.


1
Benvenuto su vi SE! Penso che la stringa asdfasdfsia speciale, nel senso che accade molto spesso nei file pratici, rispetto a una sequenza di 8 byte selezionata casualmente. Pertanto, la possibilità è molto più elevata. :-)
— user259412

0

Non penso affatto che rimuovere hls sarebbe una buona cosa, che ne dici di rendere facile abilitare o disabilitare la creazione di un collegamento facile (booleano) Nel mio caso ->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

La magia accade a causa di " !" alla fine dell'ambientazione


0

Trovo che sia molto raro per me voler evidenziare del tutto e quando ho bisogno di evidenziarlo è solo per un breve momento. La mia soluzione è

nnoremap <Leader>/ set hls!<CR>

Ciò consente di evidenziare quando si preme \/e lo disattiva nuovamente se si preme di nuovo. Ciò consente di accedere facilmente all'evidenziazione nei rari casi in cui ne hai bisogno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.