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!