Vim, definizione di "riga" e configurazione per doppia modalità di movimento tra le righe

Prerequisiti di lettura di questo articolo

Per la lettura di questo articolo è opportuno avere una conoscenza di base della sintassi di Vim.

In particolare occorre conoscere quali siano i tasti di movimento verticale e quali siano gli operatori di movimento.

Se fosse necessario avere un riferimento sulla sintassi di Vim consiglio di leggere questa guida (in inglese). L’argomento di partenza è la speciale definizione del concetto di “riga”in Vim.

Perché la definizione di riga Vim è “speciale”?

In Vim una “riga” è l’insieme di caratteri che termina con un ritorno capo.

Più semplicemente, la fine della riga è delimitata dalla pressione del tasto Invio (Return).

Sembra ovvio, ma cosa cambia rispetto alla definizione di “riga” di altri sistemi di scrittura?

Per comprendere la differenza occorre, innanzitutto, precisare che per “bordo destro” si intende sia il bordo visualizzato a monitor che eventuali impostazioni di riga che limitino i caratteri disponibili (tanto per intenderci: l’impostazione set tw=xcon x numero intero).

Nulla cambia per le righe brevi, ovvero che non eccedano il bordo destro.

Cambia, invece, nel caso di righe ridondanti, ovvero eccedenti il bordo destro.

Il testo mandato automaticamente a capo per ridondanza non viene interpretato da Vim come nuova riga.

Vim interpreta, quindi, l’oggetto riga come un insieme di caratteri che può essere, a monitor, visualizzato su più righe.

Come ci si muove tra le righe in Vim?

In Vim gli spostamenti verticali, sia con i tasti j e k che con i tasti freccia, avvengono tra righe intere, ovvero tra righe comprensive anche dei frammenti eccedenti il bordo destro.

La configurazione originale di Vim consente di muoversi molto velocemente, in genere più velocemente rispetto ad altri sistemi di scrittura.

Quando, invece, è necessario spostarsi verticalmente all’interno di frammenti di riga ridondanti occorre premettere la lettera g agli operatori di movimento j e k.

Ad esempio: per muovere il cursore verso un frammento di una stessa riga ridondante visualizzato al di sotto di quello attuale si preme la combinazione gj, per muoversi al di sopra si usa gk.

Altro esempio: per eliminare un frammento interno di riga ridondante dal punto in cui trova il cursore fino al bordo destro (come avviene, tanto per intenderci, con il comando C-k di Emacs), si utilizza il comando dg$, per l’operazione inversa si digita dg0.

Rimappare o no? Questo è il problema

È molto semplice rimappare i tasti di movimento. Una riconfigurazione di base potrebbe essere la seguente:

map j gj
map k gk

Però questa operazione rende più lento il movimento complessivo tra le righe con i tasti tipici di Vim.

Inoltre ho riscontrato un comportamento anomalo delle funzioni di folding dopo la rimappatura in quanto viene saltata una riga nelle piegature, ad esempio con zfj.

A questo punto si potrebbe rivalutare il ruolo dei tasti freccia presenti in tutte le tastiere per computer: invece di svolgere funzione di meri doppioni dei tasti jk quei tasti possono essere utilizzati per svolgere una contestuale funzione di movimento diversa da quella tipica di Vim.

Ottenere questa configurazione è molto semplice ed è l’oggetto del successivo paragrafo.

Impostare Vim per utilizzare entrambe le modalità di movimento

Assegnando la rimappatura ai soli tasti freccia si ha una duplice possibilità di movimento.

Per ottenere tale configuazione basta inserire il seguente codice nel file configurazione .vimrc:

nnoremap <Down> gj
nnoremap <Up> gk
vnoremap <Down> gj
vnoremap <Up> gk
inoremap <Down> <C-o>gj
inoremap <Up> <C-o>gk

Il codice è impostato per funzionare in tripla modalità: normale, visuale ed inserimento.

Dopo il riavvio di Vim saranno disponibili i tasti freccia verticali per i movimenti infrariga nonché i tipici tasti jk per i movimenti di default di Vim.

Grazie per l’attenzione.

Commenti

Post popolari in questo blog

PCT e collegamenti ipertestuali tra atti e documenti in Word, Writer e LaTeX

Atti giudiziari: utilizzare le variabili al posto dei nomi propri in Word, Writer e LaTeX