Vim, movimenti lampo tra le finestre con EasyMotion

vim_logo_fulmine.png

Figura 1: Vim come un fulmine

1 Breve premessa

Vim è l'editor più veloce al mondo.

Anche gli spostamenti del cursore avvengono all'istante, alla velocità del fulmine.

Chi usa Vim può dimenticare il tempo dedicato a muovere il cursore usando i tasti freccia o il mouse.

Per avere questa straordinaria funzione è sufficiente installare il plugin EasyMotion ed effettuare una minima configurazione.

Analoghe soluzioni sono disponibili anche in altri editor a linea di comando, come Emacs, Atom, Sublime Text.

Tuttavia in Vim l'implementazione è più completa e veloce rispetto agli altri ambienti.

2 Installazione e configurazione di EasyMotion

L'installazione di EasyMotion, come per qualsiasi altro plugin in Vim, è semplicissima.

Per chi usa Vim Plug come plugin manager, attualmente il mio preferito, è sufficiente inserire in .vimrc le seguenti stringhe:

Plug 'easymotion/vim-easymotion'
Plug 'haya14busa/incsearch.vim'
Plug 'haya14busa/incsearch-easymotion.vim'

Le stringhe vanno, ovviamente, inserite tra i due delimitatori:

  • call plug#begin('~/.vim/plugged')
  • call plug#end()

Poi occorre digitare :PlugInstall. Tutto qui!

Per chi usa altri plugin manager le operazioni sono un po' differenti ma, in ogni caso, molto semplici.

Dopo l'installazione occorre configurare il plugin seguendo le istruzioni presenti nella pagina dello sviluppatore.

Riporto la mia attuale configurazione:

" <Leader>f{char} to move to {char}
map  <Leader>f <Plug>(easymotion-bd-f)
nmap <Leader>f <Plug>(easymotion-overwin-f)

" s{char}{char} to move to {char}{char}
nmap <Leader>s <Plug>(easymotion-overwin-f2)

" Move to line
map <Leader>l <Plug>(easymotion-bd-jk)
nmap <Leader>l <Plug>(easymotion-overwin-line)

" Move to word
map  <Leader>w <Plug>(easymotion-bd-w)
nmap <Leader>w <Plug>(easymotion-overwin-w)

function! s:incsearch_config(...) abort
 return incsearch#util#deepextend(deepcopy({
    \   'modules': [incsearch#config#easymotion#module({'overwin': 1})],
    \   'keymap': {
    \     "\<CR>": '<Over>(easymotion)'
    \   },
    \   'is_expr': 0
    \ }), get(a:, 1, {}))
endfunction

noremap <silent><expr> /  incsearch#go(<SID>incsearch_config())
noremap <silent><expr> ?  incsearch#go(<SID>incsearch_config({'command': '?'}))
noremap <silent><expr> g/ incsearch#go(<SID>incsearch_config({'is_stay': 1}))

Potete limitarvi al copia e incolla del codice sorgente senza porvi il problema del significato di ogni passaggio.

3 Utilizzo di EasyMotion in Vim

Anche l'utilizzo è semplicissimo.

Per mirare al punto in cui volete saltare occorre osservare il testo ed identificare uno o più caratteri in corrispondenza del punto desiderato.

Poi si preme, in modalità Normale (ovvero non in modalità Inserimento), una delle combinazioni:

  1. \f per il salto verso un singolo carattere
  2. \s per il salto verso un doppio carattere
  3. / + stringa di ricerca, per il salto verso quella stringa

Seguendo le intuitive indicazioni che il sistema vi propone avrete una serie di lettere in sovraimpressione rispetto al testo sottostante: quelli sono i punti-bersaglio la cui digitazione trasferirà immediatamente il cursore al punto specifico.

La potenza di tale sistema consiste nel fatto che i bersagli dei salti sono disponibili non soltanto nel documento in cui si trova il cursore ma anche in tutti i documenti visualizzati a schermo mediante finestre affiancate.

Pertanto il salto può avvenire sia in punti diversi dello stesso documento che in punti diversi di altri documenti.

Per saltare al punto desiderato basta premere la lettera che lo identifica, tutto qui!

4 Esempi con immagini

Alcune immagini possono rappresentare più di molte parole l'estrema semplicità e immediatezza di questo straordinario sistema di movimento.

Sul sito dello sviluppatore trovate anche GIF animate molto interessanti.

La prima immagine rappresenta l'esito di una ricerca per singolo carattere con il comando \f + carattere.

La ricerca avviene, infatti, mediante la combinazione <Leader>-f (di default il carattere <Leader> è la barra obliqua \).

Nell'immagine si notano chiaramente le lettere in sovrimpressione che identificano i vari punti corrispondenti al carattere "o" che è stato utilizzato per la ricerca. Premendo uno dei caratteri evidenziati si salta al punto corrispondente.

Evidenzio che i caratteri-bersaglio sono sparsi su tutti i documenti visualizzati, corrispondenti a diversi file.

Evidenzio anche che le lettere in sovrimpressione si trovano anche all'interno delle parole, caratteristica questa distingue il sistema di Vim da quello utilizzato in altri editors, come Emacs. In particolare Ace Jump in cui vengono evidenziate solo le lettere all'inizio delle parole.

barra-f.png

Figura 2: Esempio di ricerca con Leader-f

Nel secondo esempio la ricerca è effettuata con un doppio carattere mediante il diverso comando \s + doppio carattere che, nel caso specifico, è costituito dall'insieme dei due caratteri qu.

Si nota subito la riduzione delle lettere-bersaglio rispetto all'immagine precedente e ciò deriva, ovviamente, dalla maggiore specificità della ricerca a carattere doppio rispetto a quella a carattere semplice.

La ricerca a carattere doppio serve, quindi, a mirare con più precisazione ad un punto di salto.

barra-s.png

Figura 3: Esempio di ricerca con Leader-s

Un'ulteriore selezione dei punti di salto si ottiene con la ricerca ordinaria di Vim, ovvero mediante la combinazione / + parola.

In questo caso le lettere-bersaglio sono soltanto quelle che corrispondono esattamente alla parola da cercare.

Nell'immagine seguente viene esemplificato il risultato della ricerca / + "justo". In particolare notate la lettera d che verrà utilizzata come bersaglio, come da successiva immagine.

barra-cerca-justo.png

Figura 4: Esempio di ricerca con barra ricerca ordinaria

Nell'ultima immagine ho evidenziato il risultato dopo avere premuto la lettera d della ricerca sopra indicata, utilizzata come bersaglio (la diversa configurazione cromatica della finestra ha soltanto lo scopo di differenziare le due immagini).

Notate la posizione del cursore che si trova esattamente nel punto in cui prima era evidenziata in sovrimpressione la lettera d.

barra-cerca-justo-evid.png

Figura 5: Esempio di ricerca con barra ricerca ordinaria evidenziata

5 In sintesi

La ricerca in Vim avviene alla velocità di un lampo, sia attraverso uno stesso documento che attraverso un mosaico di documenti aperto contemporaneamente nel quadro di lavoro.

In questo modo non soltanto è possibile mettere a punto una ricerca con sistemi di puntamento più o meno specifici, a seconda della conformazione del testo, ma è anche possibile saltare tra vari documenti andando a mirare esattamente al punto che ci interessa.

Veramente difficile pensare ad un'efficienza maggiore in un sistema di scrittura.

Grazie per l'attenzione.

Autore: Franco Pasut

Created: 2020-02-16 dom 18:33

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