2012-12-15 17 views

risposta

13

Se le linee non iniziano con uno spazio, è possibile sostituire ' .*' (che corrisponde tutto dopo la prima parola) con una stringa vuota:

:%s/ .*//g 
+1

Grazie. Funziona. :) – Casteurr

2

In alternativa, è possibile farlo utilizzando una macro. Digitare qa in modalità normale per avviare la registrazione di una macro nel registro a. Quindi digitare 0elDj per eliminare tutto sulla riga corrente ma la prima parola e passare alla riga successiva. Digitare di nuovo q per terminare la registrazione della macro.

Ora è possibile attivare la macro su qualsiasi riga con @a. Eseguire :%norm! @a per applicare la macro a ogni riga nel buffer.

In questo modo è possibile ripetere qualsiasi operazione complessa che si desidera, non solo sostituendo. I love macros :)

EDIT: Si noti che non funziona quando una riga ha meno di 2 caratteri. Per questo motivo, questo non è generalmente l'approccio migliore a questo problema.

6

Una soluzione più robusta è quella di filtrarlo attraverso un programma che è veramente buono con questo tipo di manipolazioni: awk.

Diciamo che ha avuto questo contenuto:

one two three 

    four five 
      six 

Run :%!awk '{print $1}' e si otterrà:

one 

four 
six 

awk 's campo predefinito carattere separatore è uno spazio, anche se si potrebbe cambiare a tutto ciò che voluto, a seconda di ciò che ti serviva.

+0

Definitivamente lo strumento giusto. ha funzionato bene per me – yantaq