Come cercare il testo selezionato in Vim?


61

Sono consapevole che posso usare /seguito da una regex per cercare qualcosa. E posso usare ?per cercare all'indietro. E posso usare ne Nripetere la ricerca avanti e indietro.

Ci sono anche due belle scorciatoie: *o #cercherà la parola sotto il cursore (avanti / indietro). È molto utile! (ci sono anche g*e g#varianti)

Ma ... Dopo aver selezionato il testo usando la modalità visiva ( v), come posso chiedere a Vim di cercare esattamente quel testo? Una rapida occhiata :helpnon mi ha aiutato.



Grazie per i suggerimenti con *e #! Sarebbe bello se la tua domanda spiegasse anche cosa g*e cosa g#farebbe;)
winklerrr

Risposte:


22

La seguente sequenza farà quello che vuoi, dato un blocco di testo già selezionato:

  • y(trascina il testo selezionato, nel "registro di default)
  • / (entra in modalità ricerca)
  • ( \ V) (opzionale, entra in modalità "molto senza magia" *)
  • Ctrl+ r "(inserisci testo dal "registro)
  • Enter (Engage!)

(*) La modalità "molto magica" interpreta il testo seguente come testo semplice anziché come regex. notare, tuttavia, che \e /sono ancora speciale e dovranno essere trattati in altri modi. Se il testo non contiene caratteri considerati speciali, puoi saltare questo passaggio.

Fonte: Vim Tips Wiki


1
Grazie! Questo è molto più comprensibile rispetto alla "How-To" sulla vim.wikia page
winklerrr

64

Puoi prima strappare il testo evidenziato. Poi

  • /

  • Ctrlr

  • "

Che incollerà ciò che hai strappato dopo il /.


7
Bella idea ... tranne per il fatto che il testo incollato verrà interpretato come una regex, che non è desiderato. :-(
Denilson Sá Maia,

4
Se questo è quasi abbastanza buono per te, allora potresti fare /\V<C-r>"invece. Anticipando la \Vtua query di ricerca, dici a vim di usare "very no magic". Le barre rovesciate possono comunque causare problemi. Vedi:help \V
idbrii,

3
Potrebbe essere utile spiegare Ctrl+Rcome si accede a un registro ed *è semplicemente il registro degli appunti di sistema. Ad esempio, puoi anche fare: yawspostare una parola nel registro "(il registro predefinito), quindi /<C-r>"cercare quella stringa.
Ben Davis,

5
@ DenilsonSá - Puoi usare questa soluzione, ma invece di usare /per fare la tua ricerca, usa ?invece, poiché le ricerche inverse sfuggono alle barre per impostazione predefinita. Quindi puoi premere Nper continuare la ricerca in avanti.
Brad Parks,

7

Non ho mai sentito la necessità di una tale funzione ma, considerando che puoi trovare una necessità per qualsiasi funzione su Vim, penso che dovrebbe aiutare:

Cerca testo selezionato visivamente

Non l'ho provato ma, guardando il codice, sembra essere esattamente quello che stai cercando.


4

Puoi trovare un metodo per creare questo comportamento qui nel wiki di vim .


Bene, ho trovato utile la versione per sfuggire alle barre. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
crea il

1

Questa soluzione migliora la tua ricerca di vim in un contesto visivamente selezionato anche con caratteri multilinea e escape.

Aggiungi il seguente codice in te .vimrce cerca il contenuto visivamente selezionato per //. Puoi anche sostituire globalmente il contenuto selezionato con /s. Oppure sostituisci localmente il contesto selezionato per //primo, quindi seleziona visivamente una regione e :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

La configurazione di cui sopra riguarda solo la ricerca. Per tutta la mia configurazione di vim, visitare .vimrc


0

Nelle mie configurazioni su due macchine separate, se seleziono il testo e poi premo /, cerca automaticamente il testo selezionato.


Questo non è il comportamento predefinito. Qui, quando premo / (mentre è in modalità visiva), mostra solo un prompt regex vuoto, in attesa che io digiti qualcosa.
Denilson Sá Maia,

Strano, perché non ho mai fatto nulla per abilitarlo.
Nathan Fellman,

3
Molte distribuzioni forniscono come impostazione predefinita una configurazione vim non standard (probabilmente perché la configurazione vim standard disabilita molte funzioni utili, principalmente per la compatibilità vi).
sleske,
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.