2009-10-14 18 views
21

Come si elimina la prima parola di ogni riga in Vim?Elimina la prima parola di ogni riga

Come su un modello su ogni linea?

+4

Penso che questa domanda appartiene a SuperUser.com –

+0

perché lo pensi? vi è anche un linguaggio di scripting. Questa domanda deve essere spostata, non chiusa, semmai – vehomzzz

+0

Chiusa come appartiene a superuser.com è uguale alla migrazione a superuser.com. – tvanfosson

risposta

19

userei qualcosa di simile al seguente:

:%s/^\w+\s+// 

L'espressione regolare corrisponderà a uno o più caratteri "word" a partire dall'inizio della riga seguito da almeno un carattere di spazio bianco. Rimuoverà la parola e ogni successivo spazio vuoto. Se una linea può contenere solo una singola parola e vuoi comunque rimuoverla, puoi utilizzare l'alternanza per abbinare uno spazio bianco o la fine della riga.

:%s/^\w+(\s+|$)// 
+0

Puoi esprimerlo più in generale: :%: s/^ \\ (\ w \ {- 1,} \\) \\ (\ W \? \\)/\ 2/ In questo modo anche tu non buttare via ciò che termina la parola carattere. (Devi anche guardare quale dialetto di espressioni regolari stai parlando ...) –

3

Primo canale (in cui parola è definita come senza spazi bianchi)

:%s/^\s*[^ ]* //g 

Elimina modello:

:%s/< insert pattern here >//g 
27

Andando per criptico qui, in vero stile VI:

[email protected] 

Randy risolto questo in su nei commenti di lavorare su più di 100000 linee:

[email protected]@q 

Per coloro che iniziano con Vim, questo si divide in:

gg - Go to first line 
qq - Record a macro into register 'q' 
[email protected] - The macro: 
      dw - delete word at cursor 
      j - go down one line 
      @q - run the macro in register 'q' 
q  - Stop recording the macro 
@q - Execute the macro in register 'q' 

In sostanza, la macro è ricorsiva: cancella una parola, si sposta lungo una linea, quindi chiama di nuovo sé stessa, ripetendo per ogni riga fino alla fine del file. L'ultimo '@q' è la chiamata iniziale (manuale) necessaria per impostare la macro su ogni linea.

+2

-1 - non sai quale sia il "vero stile vi", ma non ha senso fare cose criptiche, ostili, solo per mettersi in mostra. c'è una soluzione perfettamente leggibile, che è anche più generale. –

+3

Ah, ma qualcuno ha già pubblicato la soluzione "corretta". Questo era più sulla falsariga del code golf. Il "vero stile vi" è stato un colpo ironico in un editor dove: wq! è il modo corretto per uscire senza modifiche. Non è la bestia più user-friendly. Divulgazione completa: io amo vi e lo uso come mio editor principale. Completa divulgazione: la sintassi del comando vi non è molto comprensibile. –

+9

ggqqdwj @ qq @ q funzionerà su qualsiasi numero di righe, non solo su file con righe <100000. Tbh, questo 'criptico' era ciò che è venuto prima nella mia mente rispetto a un'espressione regolare. –

4

Che dire di questo?
:% tagliare -s -d' '-f2-

25

: normale in soccorso:

:%norm dw 

Si riproduce in sostanza gli argomenti come se li stesse scrivendo in condizioni normali ('! Non-edit ') modalità.

Da: aiuto:

: [!] Norma [al] {comandi}

eseguire comandi in modalità Normal {comandi}.

Ciò consente di eseguire comandi in modalità normale digitati sulla riga di comando . {comandi} viene eseguito come se fosse stato digitato.

+0

Come funziona? – vehomzzz

+0

Ho appena aggiunto più informazioni alla mia risposta. –

+5

Se si esegue ': norm dw' su una linea che era rientrata, eliminerebbe il rientro invece della prima parola. L'esecuzione di ': norm^dw' cancellerebbe sempre la prima parola. – nelstrom

1
:%s,^[^ ]*,, 

Dall'inizio della riga corrisponde a qualcosa, ma non a uno spazio e sostituirlo con nessuno.

+0

Va sottolineato che questo non eliminerà nulla sulle righe con rientro e che elimina ciò che Vim chiama PAROLE (separate da spazi bianchi), non parole. –

Problemi correlati