Evidenziando un termine di ricerca senza spostare il cursore


15

Usando Vim, a volte mi ritrovo a fissare una sezione del codice sorgente per un po 'e improvvisamente voglio che vengano visualizzate alcune variabili sullo schermo. È facile: il /<var>che li mette in evidenza tutti. Il mio problema è che il più delle volte la ricerca sposta la mia finestra, quindi non sto guardando il codice sorgente dallo stesso posto. Anche se ha solo spostato alcune righe, mi butta ancora fuori dal momento che ho bisogno di qualche secondo per capire dove sono andate le cose.

È possibile evidenziare un termine di ricerca senza spostare il cursore sulla corrispondenza successiva?


2
Non esattamente una risposta, ma uso solo due backtick (``) per saltare a dove ero prima.
Izkata,

Risposte:


1

http://vim.wikia.com/wiki/VimTip1572

Se hai utilizzato questo plugin, puoi semplicemente abilitare la funzionalità

\ m

quindi usa un tasto NumPad per assegnare un colore a quella parola ovunque senza muovere il cursore.

1

Puoi utilizzare molti punti salienti contemporaneamente per molte parole diverse o, se lo desideri, schemi di ricerca più complessi.


Adoro questo plugin!
Andrew Wood,

15

La risposta di skyblue mostra il nucleo dell'idea di come utilizzare l'evidenziazione della ricerca normale per ottenere ciò che desideri.

Ho esteso quella tecnica creando un keybinding che funziona in modo simile al *comando , ma senza passare effettivamente alla corrispondenza successiva.

I miei ringraziamenti vanno a garyjohn per aver sottolineato l' expand()equivalente della *selezione delle parole (per evitare di usare *se stesso e ripristinare la vista). Questo semplifica abbastanza il codice in modo che possa andare direttamente nella mappatura (ovvia utilizzando una funzione). Ho anche aggiunto una mappatura che corrisponde a parole parziali (come g*).

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>

1
È possibile evitare le chiamate a winsaveview (), winrestview () e normal *sostituendole let @/ = @/con let @/ = expand("<cword>").
garyjohn,

@garyjohn: Sì, è meglio. Non ero sicuro che ci fosse qualcosa di equivalente alla selezione di "parole" fatta da *, ma <cword>è così.
Chris Johnsen,

13

È inoltre possibile impostare il registro di ricerca sulla variabile che si desidera abbinare.

Innanzitutto, assicurati che l'evidenziazione della ricerca sia attivata:

:set hlsearch

Quindi, puoi impostare il registro di ricerca con:

:let @/="variable"

Ciò evidenzierà tutte le occorrenze della variabile senza passare alla partita successiva.

Per ulteriori informazioni, vedere :help @/


7

Un modo è usare il :matchcomando, ad es.

:match Question '^R^W'

Ciò evidenzierà la parola sotto il cursore usando il gruppo di evidenziazione Domanda. Uso spesso il gruppo di domande perché sul mio terminale è un bel verde. Per visualizzare i gruppi di evidenziazione disponibili, eseguire

:hi

I ^Re ^Wsono Ctrl-R e Ctrl-W, rispettivamente, e sono sostituiti dalla parola sotto il cursore. Vedere

:help c_CTRL-R_CTRL-W

per saperne di più. Vedere

:help :match

per ulteriori informazioni sul :matchcomando. Per cancellare l'evidenziazione, esegui semplicemente

:match

senza argomenti.


1

Inoltre:

 :set hlsearch

Potresti voler:

 : set noincsearch

0

Simile a *abbiamo:

[I ............................. it show where the word under the cursor appears

Vale la pena dare un'occhiata :h [I. lì troviamo alcune cose interessanti legate alle tue esigenze.

C'è una domanda simile su StackOverflow in cui ho inserito la mia risposta (un po 'più completa)

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.