Per chi come me usa Vim quotidianamente (ma il discorso è perfettamente se a Vim si sostituisce qualsiasi altro editor, blocco note di Windows compreso) è una rogna dover gestire file contenenti linee lunghissime, abbondantemente al di là dei margini, usando i tasti direzionali o 'hjkl' per muoversi continuamente avanti e indietro nella linea. È anche una rogna scrivere email usando Vim all'interno di Mutt con la funzione di break automatico, che interrompe la riga e va a capo in genere dopo 80 caratteri, e operare una correzione a metà dell'email quando si è già arrivati alla fine. A quel punto si opera la correzione, poi in genere si cerca di ristabilire manualmente il break delle righe, per fare in modo che il margine degli 80 caratteri massimi venga rispettato. Una cosa a dir poco abbruttente.
Ora quei tempi bui sono terminati. Non avendo trovato nulla di simile in giro (ma sono sicuro che sia possibile qualcosa del genere usando le magie nere di sed e/o awk, ma non volevo addentrarmi in meandri di scripting e sequenze simili all'aramaico note solo a pochi massoni eletti), ho sviluppato un minuscolo ma IMHO utilissimo script in Perl che consente, dato un testo da file o via stdin, di stabilire automaticamente la larghezza massima dei margini a un numero di caratteri predefinito (di default 80, ma stabilibile con l'opzione -n), e scrivere il risultato su stdout o su un file di output. Più o meno come opera l'opzione :set textwidth=n in Vim, ma mentre quell'opzione funziona solo mentre si digita il testo e inserisce automaticamente un break quando vengono digitati n caratteri, questo script opera su un testo già fornito, sistemando correttamente i break delle linee.
Link:
http://sprunge.us/jbeC
Si integra alla perfezione con Vim. Basta piazzare lo script nel proprio PATH e quindi inserire in .vimrc le righe
A questo punto, digitando \ls in normal mode tutto il file verrà breakkato (di default ogni linea conterrà al massimo 80 caratteri e le parole non verranno spezzate). In visual mode sarà invece possibile selezionare il blocco da breakkare, e digitando \ls solo quelle righe verranno spezzate.
Ancora, dando
si splittano in righe il file text1.txt mandando l'output a file2.txt. Mentre
splitta in righe il file text.txt mandando l'output su stdout.
Lo script magari può sembrare banale, ma dopo tanto tempo di splitting manuale sui testi avevo bisogno di un'utility del genere.
Ora quei tempi bui sono terminati. Non avendo trovato nulla di simile in giro (ma sono sicuro che sia possibile qualcosa del genere usando le magie nere di sed e/o awk, ma non volevo addentrarmi in meandri di scripting e sequenze simili all'aramaico note solo a pochi massoni eletti), ho sviluppato un minuscolo ma IMHO utilissimo script in Perl che consente, dato un testo da file o via stdin, di stabilire automaticamente la larghezza massima dei margini a un numero di caratteri predefinito (di default 80, ma stabilibile con l'opzione -n), e scrivere il risultato su stdout o su un file di output. Più o meno come opera l'opzione :set textwidth=n in Vim, ma mentre quell'opzione funziona solo mentre si digita il testo e inserisce automaticamente un break quando vengono digitati n caratteri, questo script opera su un testo già fornito, sistemando correttamente i break delle linee.
Link:
http://sprunge.us/jbeC
Si integra alla perfezione con Vim. Basta piazzare lo script nel proprio PATH e quindi inserire in .vimrc le righe
Codice:
nmap \ls :%!linesplit<CR>
vmap \ls :!linesplit<CR>
A questo punto, digitando \ls in normal mode tutto il file verrà breakkato (di default ogni linea conterrà al massimo 80 caratteri e le parole non verranno spezzate). In visual mode sarà invece possibile selezionare il blocco da breakkare, e digitando \ls solo quelle righe verranno spezzate.
Ancora, dando
Codice:
linesplit -i text1.txt -o text2.txt -n 40
si splittano in righe il file text1.txt mandando l'output a file2.txt. Mentre
Codice:
cat text.txt | linesplit
splitta in righe il file text.txt mandando l'output su stdout.
Lo script magari può sembrare banale, ma dopo tanto tempo di splitting manuale sui testi avevo bisogno di un'utility del genere.