Eliminare un intervallo di n righe prima e dopo una linea abbinata?


12

Ho un file di configurazione ripetitivo e vorrei abbinare una regex ed eliminare un intervallo di righe prima e dopo una partita. Vorrei anche eliminare la partita in un solo comando.

Posso usare...

:g/match/-1d

... più volte per eliminare più di una riga prima di una partita ...

... e combinalo con alcune chiamate a ...

:g/match/+1d

... per cancellare più di una riga dopo la partita ...

Ma c'è un modo per eliminare un intervallo di righe, prima, dopo e incluso, la corrispondenza con un comando?

Risposte:


21

Ci sei quasi; puoi anche specificare un intervallo di linee, che è nella forma di [line1],[line2][command], anziché solo [line][command](come stai usando ora).

È possibile utilizzare .per fare riferimento alla riga corrente.

  • Per la riga corrente e successiva: :g/match/.,+1d
  • Per la riga corrente e precedente: :g/match/-1,.d
  • Per la riga precedente, corrente e successiva: :g/match/-1,+1d

Vedere :help [range]per ulteriori informazioni e in questa risposta ci sono alcuni altri esempi .


La sintassi è la stessa in sed?
leeand00,

3
@ leeand00 No. Tutto ciò che :gfa è eseguire un comando ex sulle linee che corrispondono a un modello. Quindi digitare :g/match/.,+1dsarebbe esattamente lo stesso di andare su tutte le righe matche digitare:.,+1d
Martin Tournoij,

Questa è la cosa più bella che ho imparato su Vim da un po '. Grazie per la condivisione!
lps
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.