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.