vim: usa la stringa dalla ricerca nel comando sostituisci


16

Uso spesso il /comando vim search per verificare le mie espressioni regolari (solo per vedere cosa corrisponde). Dopodiché di solito uso il :%scomando di sostituzione, dove uso quel regexp dalla ricerca come stringa da sostituire, ad esempio cerco prima tale stringa:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Corrisponde esattamente a quello che voglio, quindi faccio la mia sostituzione:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Ma devo scrivere di nuovo l'intera regexp qui. Di solito quel regexp è molto più lungo, ecco perché sto cercando una soluzione:

Esiste un collegamento esistente o uno script vim per incollare quel modello di ricerca direttamente nel comando di sostituzione?

Uso vim nel terminale (no gvim).

Risposte:


20

In generale, un'espressione regolare vuota significa utilizzare l'espressione regolare precedentemente immessa, quindi :%s//\1/gdovrebbe fare quello che vuoi.


Woah, è così facile! Esattamente quello di cui avevo bisogno, grazie.
kars7e,

10
Inoltre, se si desidera verificare o modificare l'ultimo modello utilizzato, è possibile utilizzare Control-r quindi /inserire il contenuto del registro del modello di ricerca ( /) direttamente in una riga di comando parzialmente digitata (ad es. Subito dopo :%s/).
Chris Johnsen,

anche questo è un suggerimento molto utile. Grazie @ Chris! +1
kars7e,

Cosa succede se desidero seguire "\ 1" con un numero come dire 23? Come posso evitare che venga interpretato come "\ 123"?
Champ

@Champ Dato che solo i riferimenti posteriori risalgono a \9, non c'è ambiguità.
Kusalananda

4

Un altro buon modo per vedere le ricerche di regex passate così come i comandi Ex e apportare modifiche è di modificare questi comandi in modalità normale. Da questa modalità avrai tutti i tuoi poteri vim tra cui copia e incolla.

  • Ricerca: anziché ?o /per la ricerca, provare q/oq?
  • per Ex Commands, piuttosto che :provareq:
  • per uscire da questa modalità utilizzare CtrlC

Per saperne di più vedi :help q:.

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.