Usare Vim per automatizzare alcuni aspetti del PCT
Oggi (17 luglio 2019) ho dovuto depositare in poco tempo uno sfratto per morosità (l’udienza per convalida è fissata per domani).
Ho potuto quindi testare l’efficienza del mio nuovo metodo di creare documenti utilizzando Markdown, Pandoc e LaTeX come descritto in questa serie di articoli.
Il risultato finale mi ha soddisfatto così tanto e stimolato che ho deciso di formalizzare in questo articolo una scorciatoia che ho creato e perfezionato proprio per scrivere l’articolo. Ne approfitto in particolare per parlarvi del mio adorato Vim.
1. Alcune brevi premesse
Per il deposito dello sfratto il Tribunale di Reggio Emilia ha optato per utilizzare per l’iscrizione a ruolo, come atto principale, la predisposizione di una nota di deposito in cui elencare i documenti e gli atti depositati. Con Vim ho automatizzato la creazione dei link a tutti questi documenti e di seguito vi spiegherò nel dettaglio come.
Il metodo per creare i link ai documenti in Markdown l’ho descritto compiutamente in un precedente articolo (al punto 2.5) ed in questo articolo non mi ripeterò.
Da ultimo, prima dei passaggi che vi descriverò a breve segnalo che ho creato un’automazione, utilizzando Automator, per numerare i documenti secondo l’ordine dell’elenco dei documenti dell’atto.
Qui trovate la versione modificata che, oltre a numerare, toglie gli spazi eventualmente presenti tra le parole del nome dei documenti e lo sostituisce con un trattino basso “_”. Quest’operazione è necessaria perché la presenza di spazi non permette a Pandoc e LaTeX di creare dei PDF con i collegamenti ai documenti in modo corretto.
Segnalo, infine, per i curiosi che Vim è pre-installato su ogni Mac (solo se volete la versione più recente dovete installarlo ex novo). Aprite Terminale e digitate “vim” (se rimanete bloccati lì premete “:q” che serve per uscire dal programma).
2. Aprire il nostro documento .md in Vim
Apriamo in Vim il nostro documento scritto in markdown. Per fare ciò è sufficiente aprire una finestra del Terminale di macOS, spostarsi nella cartella in cui si trova il documento e digitare:
vim prova.md
Dove prova.md
è il nome del documento che vogliamo modificare.
Abitualmente l’elenco dei documenti è alla fine dell’atto per cui aperto il documento premete G
ovvero g maiuscolo per andare immediatamente alla fine del documento.
3. Acquisire i nomi dei PDF contenuti all'interno di una cartella e creare i link ai PDF in un atto telematico.
Il primo passo per creare i link è quello di importare il nome di tutti i documenti all’interno del nostro atto scritto in Markdown. Per fare questo in Vim l’operazione è semplice e veloce.
Basta digitare, in modalità normale, il comando:
:r !ls *.pdf
e comparirà a schermo l’elenco di tutti i PDF all’interno della cartella di lavoro.
Per chi non fosse avvezzo ai comandi emetici di Vim spiego cosa fa il comando:
- i due punti “:” fanno entrare Vim in modalità comando, dove è possibile impartire comandi specifici all’applicazione;
- Il punto esclamativo “!” dice a Vim che quello che seguirà è un comando a terminale, nel nostro caso “ls” che sta per list file ovvero stampa la lista dei documenti indicati nella cartella;
- da ultimo ho aggiunto la restrizione di stampa ai soli documenti PDF aggiungendo “*.pdf”, l’asterisco è il carattere speciale che dice ad ls di stampare qualsiasi documento che finisca con l’estenisione PDF; questa aggiunta è opzionale e non serve se oltre ai documenti PDF dobbiamo allegare, ad esempio, dei file .EML .
Vi troverete quindi in usa situazione simile a quella mostrata nell’immagine sottostante.
4. Registrare una semplice macro per formattare il testo così copiato all’interno del nostro documento
Vim nasce come uno strumento pensato specificamente per automatizza le azioni ripetitive.
Nel nostro caso ci troveremo con un elenco di nomi di documenti a cui dovremo anteporre la seguente dicitura:
[doc00]:
Dove al posto degli zeri ci sarà il corretto numero del documento, il risultato finale che otterremo sarà qualcosa di simile a questo:
[doc01]: doc01-test.pdf
Per automatizzare l’inserimento ripetitivo di testo uno strumento utile sono le macro di Vim.
Le macro sono un semplice modo di automatizzare l’inserimento di testo in Vim basterà infatti registrare un’insieme di istruzioni di Vim e poi invocare la macro per richiamare tutti i comandi tante volte quanto sono le aggiunte da inserire, ovvero per N nomi dei documenti da modificare.
Per entrare in modalità registrazione macro in Vim basta digitare il tasto “q” in modalità normale.
A questo punto posizionate il cursore sulla prima lettera del testo del nome del primo documento e digitate il seguente testo:
mi[doc00]: <esc>j0q
Anche qui spiego cosa avete fatto digitando questa serie di comandi:
- con il tasto “m” darete il nome alla macro (potete usare qualsiasi lettera o numero per questo esempio ho usato “m” che riprende macro)
- con “i” entrate nella modalità di inserimento e potete digitare all’interno del documento il testo che vi serve ovvero “[doc00]: “ (Parentesi quadra, doc, zero, zero, parentesi quadra, spazio e due punti);
- Premerete quindi il tasto ESC (rappresentanto da (rappresentanto da
<esc>
) per uscire dalla modalità di inserimento e tornare in modalità normale; - Con il tasto “j” vi sposterete nella riga successiva, con il tasto ”0” (zero) vi sposterete all’inizio del nome del documento successivo e con la pressione del tasto “q” finirete di registrare la macro.
A questo punto eseguire la macro su tutto il testo importato.
Per fare ciò vi basterà digitare “@m” N volte in base alle righe di testo che volete modificare. Oppure, se non avete voglia vi basterà digitare il numero delle righe che volete modificare seguito da “@m”.
Fatto ciò vi troverete in una situazione simile a questa:
[doc00]: doc01_test.pdf [doc00]: doc02_prova.pdf [doc00]: doc03_Altro_test.pdf …
5. Numerare correttamente il riferimento al link del documento
Il problema della situazione attuale è che il segnaposto di ogni documento non è denominato correttamente rispetto al numero del documento ma è “[doc00]”.
Entra in gioco un altro “trucco” o scorciatoia di Vim ovvero la numerazione progressiva.
Per fare ciò entrate in VISUAL BLOCK mode (modalità visuale a blocchi) premendo ctrl-v. Selezionate i numeri della colonna (tipo "doc. 00") (usando "j").
Premere "g" e poi ctrl-a. Al posto del “doc00” verrà creato un conteggio incrementale.
Qui trovate il link di riferimento alla guida che ho usato (come sempre non mi sono inventato niente).
Piccola nota a margine: Nella guida che ho usato come riferimento dice che la numerazione funziona solo con la versione 8 e successive di Vim ma ho testato con la 7.4 sul mio iMac d'ufficio e funzionava comunque.
5.1 Markdown e “link impliciti”
Leggendo le regole sui link impostate da John Gruber ho scoperto che è possibile fare dei link impliciti che, di fatto, velocizzano ancora di più la creazione dei link stessi nell'atto.
Addirittura non è case sensitive quindi si può scrivere il riferimento ed il link maiuscolo o minuscolo indifferentemente.
Basterà usare questo schema:
[link][] [link]: nome_file.pdf
In estrema sintesi si può scrivere un testo simile a questo:
… come mostrato nel [doc. 01][] … [doc. 01]: doc_01_test.pdf
6. Ulteriori automazioni
Visto che quanto vi ho descritto andrebbe fatto ogni volta che si completa un atto telematico l’ulteriore problema che si pone è che quanto ho detto va digitato ogni per ogni atto. Nulla di tremendo certo … ma perché farlo?
Come sapete io sono un pigro … per cui ho ben pensato di automatizzare ancora un po’ l’intero sistema.
Per fare ciò è necessario aggiungere una scorciatoia a tastiera nelle preferenze delle impostazioni di Vim.
Non entrerò nel dettaglio perché l’argomento potrebbe occupare un intero libro (e probabilmente io ci scriverò almeno un articolo) ma basta inserire il seguente testo all’interno del file .vimrc (dove sono contenute le personalizzazioni di Vim):
" Inserimento documenti per PCT in Virtual block mode / Visuale Blocco vnoremap \<leader>w I[doc00]: <esc>
Se non avete un file .vimrc nella vostra cartella Home vi basterà digitare vim .vimrc
e, se non sapete se avete un file .vimrc nella vostra Home vi basterà digitare, appena aperto il Terminale ls -a
(nell’immagine che segue vedete il risultato della mia Home directory).
Piccola nota: in macOS come in Linux e tutti i sistemi Unix un file con davanti il puntino è un file invisibile ovvero un file che, salvo impostazioni specifiche, non viene visualizzato nel > Finder> .
6.1 Come utilizzare la scorciatoia a tastiera
Vediamo esattamente cosa vi ho fatto inserire nel vostro file .vimrc e come utilizzare l’automazione.
Anzitutto useremo il trucco che vi ho già spiegato della visuale blocco o Visual Mode.
Posizionatevi quindi all’inizio del primo nome del documento a cui volete creare il link. Digitate quindi ctrl-v per attivare la modalità visuale blocco e con la lettera “j” o le freccine spostatevi fino al nome dell’ultimo documento per cui volete creare il link.
A questo punto digitate spazio e “w”, magicamente comparirà verrà anteposto il testo “[doc00]: ” a tutti i nomi dei documenti.
A questo punto seguite le operazioni descritte al punto 5 per creare la numerazione crescente.
6.2 Alcune precisazioni chiarificatrici
La “magia” a cui avete assistito è qualcosa di relativamente semplice ma credo sia utile spiegare alcune cose.
Anzitutto partiamo dal comando che abbiamo inserito nel nostro file .vimrc.
vnoremap <leader>w I[doc00]: <esc>
Il comando serve a “mappare” una scorciatoia a tastiera per la modalità visuale / la visuale blocco; per fare ciò si usa il comando vnoremap
.
Visto che Vim ha già tantissimi comandi associati alle lettere e, associare un nuovo comando ad una lettera in uso non è un buon metodo alla lunga, ho abbinato il comando alla c.d. leader key usando il testo “<leader>
w”. Di base la leader key in Vim è il “;” ma io ho ri-mappato la stessa con lo spazio. Per cui premendo spazio e la lettera “w” in visuale blocco Vim eseguirà i comandi mostrati subito dopo ovvero:
I[doc00]: <esc>
Si utilizza la “I” (i maiuscola) invece della normale “i” per accedere alla modalità “inserisci” (insert mode in inglese) perché altrimenti è possibile digitare il testo nella visuale a blocco qui trovate il riferimento da dove ho preso il trucco. Una volta nella modalità di inserimento verrà digitato il testo “[doc00]: “ e poi premuto il tasto ESC per uscire dalla modalità di inserimento.
In conclusione
In questo video su YouTube avevo fatto vedere per sommi capi il sistema di automazioni che vi ho descritto nell’articolo di oggi. Credo che il tempo passato e la maggior famigliarità con Vim mi abbia permesso di rendere il tutto più lineare e semplice.
Questo tipo di automazioni, inoltre, dimostra la flessibilità e possibilità di personalizzazione che un editor di testi come Vim concede all’utente finale.
So che lavorare in questa modalità non è per tutti; spero tuttavia che questi articoli possano stimolare alcuni di voi a testare il sistema che, come dicevo all’inizio, non vi richiede di installare nulla (per Vim – Pandoc e LaTeX vanno invece installati). Certo a prima impressione può sembrare molto lontano da quello che un avvocato è abituato a fare / usare, tuttavia l’utilizzo di questi strumenti gratuiti da un lato non è precluso a nessuno dall’altro può essere fatto anche solo “copiando” il lavoro di altri. Quel che scrivo io è una volgarizzazione di articoli o idee di altri applicati semplicemente al mio problema specifico (la creazione di atti telematici avanzati in Markdown).
Come sempre se avete commenti o domande scrivetemi qui sotto o mandatemi un email.