Ho linee come
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Se una riga corrisponde a regex ^a.+g$ poi vorrei che si unissero, quindi sarebbe:
abcdefgjoin!
abcdef
no join
abcdefgjoin!
C'è un modo per farlo in VIM ?
Risposta accettata:
In modalità normale, J (distinto da j , che sposta il cursore in basso di una riga) viene utilizzato per unire una riga a quella direttamente sotto di essa. Tuttavia, per impostazione predefinita, aggiunge uno spazio alla fine della prima riga; per ottenere il risultato desiderato (unire le righe senza inserire uno spazio aggiuntivo), si dovrebbe usare gJ .
Per utilizzare i comandi in modalità normale in modalità ex (che inserisci premendo : mentre in modalità normale), è necessario utilizzare il normal comando. Vedi :h normal entro vim. Quindi, per lavorare con la riga successiva che corrisponde al modello, si dovrebbe usare (nota che per impostazione predefinita, devi sfuggire a + per farlo funzionare con la regex di vim, una conseguenza del mantenimento della compatibilità con l'antico motore regex di vi originale):
:/^a.\+g$/normal gJ
Per lavorare su ogni riga che corrisponde al modello, si userebbe il :global comando (vedi :h :g all'interno di vim) in questo modo:
:global/^a.\+g$/normal gJ
O, più concisamente:
:g/^a.\+g$/norm gJ
È anche possibile utilizzare il comando ex join (vedi :h :join ) per ottenere la stessa cosa con una digitazione leggermente inferiore (il ! alla fine, in questo caso, dice a join di non inserire uno spazio alla fine della prima riga).
:g/^a.\+g$/join!