Skip to navigation
Logo Penaz's Area

cat /dev/random > penaz

Impariamo VI (Improved) - Le Abbreviazioni


Impariamo come usare la funzione di abbreviazione di VIM per inserire piccoli snippet di codice, indirizzi completi e molto altro.

Se siete dei programmatori sicuramente vi servirete di uno snippet manager di qualche tipo. Gli Snippets sono delle porzioni di codice che solitamente vengono rilasciati a fini didattici, noi possiamo gestirli direttamente con VIM senza alcun problema tramite le funzioni di abbreviazione. Vediamo come.

Come esempio ho voluto prendere una porzione di codice usata in pygame, precisamente l'event loop e l'aggiornamento dello schermo dove tutti gli eventi vengono catturati, click del mouse, pressioni sulla tastiera, ecc...

Il codice d'esempio sarà:

for event in pygame.event.get():
    if event.type==QUIT:
        exit()
pygame.display.update()

Ora creiamo nella nostra home il file abbreviations.vim nel quale andremo ad inserire questo testo:

:iabbrev eventloop for event in pygame.event.get():<CR><TAB>if event.type==QUIT:<CR><TAB>exit()<CR><BS><BS>pygame.display.update()

Ad una prima occhiata il codice sembra molto complesso ma segue sempre la stessa struttura:

:iabbrev <parola chiave> <sequenza completa>

In questo caso la parola chiave è eventloop a cui verrà sostituito tutto il codice d'esempio. Ora non ci resta che capire i significato dei tag compresi tra parentesi angolari, ecco una piccola tabella che sarà sicuramente d'aiuto:

Tag Azione
<CR> Simula la pressione del tasto invio
<TAB> Simula la pressione del tasto tab
<BS> Simula la pressione del tasto backspace

Questi sono solo una minima parte, potete vederli tutti digitando il comando

:help key-codes

all'interno dell'editor.

Salviamo il file delle abbreviazioni.

Ora apriamo il nostro file di configurazione .vimrc con:

vim .vimrc

E aggiungiamo alla fine del file la riga:

source abbreviations.vim

Un'alternativa altrettanto valida sarebbe stata quella di scrivere il comando direttamente nel file .vimrc, ma usando questo metodo si può categorizzare meglio la nostra configurazione, senza perdite di funzionalità.

Salviamo anche .vimrc e riapriamo VIM, entriamo in modalità inserimento con

[i]

e digitiamo

eventloop

quando premeremo spazio o invio vedremo la scritta "eventloop" sostituita dal codice:

for event in pygame.event.get():
    if event.type==QUIT:
        exit()
pygame.display.update()

Esattamente quello che volevamo.

Se vogliamo aggiungere nuove abbreviazioni basta inserirle nel file abbreviations.vim con lo stesso stile, una per riga, ecco per esempio le prime due righe del mio abbreviations.vim:

:iabbr pygameframework import pygame<CR>from pygame import *<CR>from sys import exit<CR>pygame.init()<CR>screen=pygame.display.set_mode((x,x),0,32)<CR>while True:<CR><T    AB>#Inserire qui il codice<CR>pygame.display.update()

:iabbr pygameeventloop for event in pygame.event.get():<CR><TAB>if event.type==QUIT:<CR><TAB>exit()<CR><BS>

Se usate saggiamente le abbreviazioni possono risparmiarvi molte righe di codice e una marea di tempo.

Al contrario di molti altri editor, VIM effettua la sostituzione solo dopo aver ricevuto uno spazio o invio, quindi se avete un'abbreviazione del tipo:

:iabbrev addr Via Garibaldi,8 20100 Milano (MI)

VI non effettuerà sostituzioni sulle parole address, addressing, addressed ecc... Ma solo su addr seguito da uno spazio o da invio.

Se volete avere a disposizione un vero gestore di snippet, potete installare uno dei tantissimi plugin dedicati, basta cercare!

Buone Abbreviazioni a Tutti!

Penaz