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.