2. Spostarsi

2.1. I tasti "w", "e" e "b"

Per spostarsi all'interno dei file si possono usare i tasti w, e e b. VIM è in grado di riconoscere i vari componenti delle espressioni C.

Considerate il seguente codice C

Considerate che il cursore sia posizionato all'inizio dell'espressione if. Premendo "w" una volta, il cursore salterà al primo (. Premendo ancora w il cursore si sposterà su NULL, quindi su ==. Le pressioni seguenti del tasto vi porteranno a x... )... &&... y... >... z... e alla fine )...

e è simile a w, solo che vi porta alla fine della parola corrente e non all'inizio della seguente.

b fa esattamente l'opposto di w: sposta il cursore nella direzione opposta, dunque potete muovervi all'indietro usando il tasto b.

2.2. I tasti {, }, [[ e ]]

I tasti { e } vengono usati per spostarsi da un paragrafo ad un altro. Quando scrivete file C, questi tasti hanno un significato leggermente differente: un paragrafo rappresenta un gruppo di righe separate da una riga vuota.

Ad esempio

Il ritaglio qua sopra rappresenta due paragrafi. E' possibile muoversi dall'inizio di uno all'altro, usando i tasti { e }. { porterà il cursore al paragrafo superiore e } lo sposterà a quello inferiore.

Molte persone usano uno stile di creazione del codice per il quale un insieme logico di espressioni viene raggruppato insieme e separato da una o più righe vuote.

Ad esempio

I tasti { e } sono molto utili in queste situazioni. E' possibile muoversi da un "paragrafo" all'altro.

Un altro gruppo di tasti utili sono [[ e ]], che vi permettono di saltare alla precedente { o alla seguente { nella prima colonna.

Ad esempio

Diciamo che state lavorando su foo() e ora volete modificare bar(). Semplicemente digitate ]] ed il cursore vi porterà alla { di apertura della funzione bar(). L'inverso è leggermente differente. Se siete nel mezzo di bar() e digitate [[, il cursore si sposterà alla prima { precedente, cioè all'inizio di bar() stessa. Per spostarsi all'inizio di foo() serve ancora [[. Il numero di pressioni dei tasti può essere minimizzato digitando 2[[per portare il cursore all'inizio della funzione precedente.

Altri insiemi di tasti simili sono ][ e []: ][ porta il cursore alla successiva } nella prima colonna. Se state modificando foo() e volete andare alla fine di foo() allora ][ vi porterà lì. In maniera simile se state modificando bar() e volete andare alla fine di foo() allora [] porterà lì il cursore.

Il modo per ricordarsi tutte le combinazioni è spezzarle. Il primo tasto indica se il cursore deve muoversi su o giù: [ andrà su e ] andrà giù. Il seguente indica il tipo di parentesi da cercare. Se è lo stesso tasto allora il cursore si muoverà alla {. Se il tasto è differente allora il cursore andrà a }.

Una cosa a cui fare attenzione per i tasti ]], ][, [[ e [], è che essi cercano le parentesi sulla prima colonna; se si vogliono ricercare tutte le parentesi sopra o sotto indipendentemente dal fatto che siano o no nella prima colonna non lo si può fare. La documentazione di VIM riporta un metodo per aggirare tutto questo: bisogna associare la pressione dei tasti alle parentesi. Per non farvi sprecare troppo tempo nella ricerca dell'associazione, quelle suggerite sono

:map [[ ?{<CTRL-VCTRL-M>w99[{

:map ][ /}<CTRL-VCTRL-M>b99]}

:map ]] j0[[%/{<CTRL-VCTRL-M>

:map [] k$][%?}<CTRL-VCTRL-M>

2.3. Tasto %

Il tasto % cerca un corrispondente all'oggetto sotto il cursore. L'oggetto sotto il cursore può essere una parentesi tonda, una graffa o una quadra. Premendo il tasto % il cursore salterà al corrispondente.

Tra le altre cose, il tasto % può essere anche per accoppiare #if, #ifdef, #else #elif e #endif.

Questo tasto è molto utile nel controllo del codice che è stato scritto. Ad esempio

Controllare il codice qua sopra implica il controllo della correttezza delle parentesi. Il % può essere usato per saltare da una ( alla sua corrispondente ) e viceversa; inoltre, potete scoprire quale parentesi aperta corrisponde a un'altra chiusa ed usare l'informazione per controllare il codice.

In maniera simile il % può essere usato per saltare da una { alla sua } corrispondente.