Vim: seleziona il testo evidenziato dalla ricerca?


53

In effetti, eseguo spesso ricerche per saltare a una parola o una frase invece di navigare lì h/j/k/l. Poi ho colpito nper saltare tra le occorrenze.

Di 'che ho questo testo:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

Scrivo /an arrowe premo invio. Quella frase è evidenziata e io ci salgo sopra n.

Ora voglio selezionare visivamente quel testo , forse per cambiarlo o eliminarlo. (Sì, sono a conoscenza del :scomando di sostituzione.)

Poiché il mio cursore si trova sulla lettera "a" all'inizio di "una freccia", posso vpremere, quindi premere eun paio di volte per evidenziare l'intera frase. Ma ho la sensazione che ci sia un modo più breve e più semantico. Dopo tutto, ho già specificato il testo che mi interessa.

Come potrei comporre un comando per dire "seleziona visivamente la selezione di ricerca corrente?"

Risposte:


38

È possibile utilizzare gndalla versione 7.4 in poi (e gNper tornare indietro). Sostituisce il v//etrucco.

Cerca in avanti l'ultimo modello di ricerca utilizzato, come con `n`, e avvia la modalità Visual per selezionare la corrispondenza.

Vedi :help gno questo Vimcast per maggiori informazioni.


Questo duplica un commento ad un'altra risposta e non è molto utile così com'è. Potrebbe essere una buona idea se hai citato la documentazione in modo che la tua risposta possa essere autonoma.
bwDraco,

2
Felice di migliorare la risposta, ma non sono sicuro che ciò possa aiutare. La domanda definisce chiaramente l'obiettivo ("seleziona visivamente il prossimo risultato di ricerca") e gnfa esattamente come richiesto. L'invio come risposta separata sottolinea che è un sostituto completo per v//e. Ho appena modificato la mia risposta per aggiungere documentazione, è meglio?
David Lord,

Va bene, grazie. Se hai bisogno di aiuto, assicurati di visitare il tour e il centro assistenza . Benvenuto in Super User e speriamo che il tuo soggiorno sia piacevole.
bwDraco,

1
Fantastico! Grazie per aver aggiornato questo thread con l'ultimo e il più grande. :)
Nathan Long,

29

Prova questo:

/an arrow
v//e

Va in modalità visiva, ripete l'ultima ricerca e seleziona fino alla fine.


1
Da Vim 7.4 gnfa anche questo (senza cambiare cosa nsignifichi)
smathy,

8

Ho scoperto che di v//eper sé non è sufficiente perché dopo che esci dalla modalità visiva, saltare al risultato di ricerca successivo / precedente posiziona il cursore alla fine del risultato, anziché all'inizio come normalmente ti aspetteresti.

Per risolvere questo problema, dovremmo prima saltare alla fine del risultato della ricerca ( //e) e quindi selezionare visivamente all'inizio ( v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

Saluti.


Per simmetria: nnoremap g? ??b<cr>v//e<cr>(fa la stessa cosa ma cerca all'indietro anziché in avanti)
Kyle Strand

2

Ora esiste un plug-in Vim-Search-Objects che consente a Vim di trattare le corrispondenze di ricerca come normali oggetti di testo, in modo da poter semplicemente va/(selezionare visivamente una corrispondenza) dopo aver eseguito una ricerca.


1

Un modo "stupido" per farlo è mappare una chiave (in questo caso F5) come di seguito:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

Dopo /an arrowpremere F5.


Questo seleziona un altro personaggio a causa del +1. Omettilo e selezionerà solo la parte che è stata cercata. D'altra parte, nnoremap <F5> v//e<CR>sembra funzionare bene.
Dennis Williamson,

@Dennis Williamson, + 1 è necessario per selezionare esattamente ciò che è stato cercato, se si rimuove +1 l'ultimo carattere non verrà selezionato perché non seleziona il carattere in cui si trova il cursore. In ogni caso nnoremap <F5> v // e <CR> è molto meglio.
Johnny,

Seleziona il personaggio per me. Se premo xo cdopo aver fatto il tuo, F5ma senza l' +1intera stringa di ricerca, incluso il carattere sotto il cursore, viene eliminato.
Dennis Williamson,

@Dennis Williamson, ho appena appreso che la mia opzione 'selezione' è impostata su "esclusivo", ma il valore predefinito è "inclusivo". Ecco perché ha funzionato per te senza +1. (Vedi: selezione aiuto)
Johnny,
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.