
% VIM Quick Reference Card
% Copyright (c) 2002 Laurent Gregoire.
% TeX Format

% Note:  Comment the following line (\input outopt.tex) if you want
% to generate yourself the card, either in DVI or PDF format.
% Uncomment the three next lines for PDF generation.
% Command for DVI : tex vimqrc.tex
% Command for PDF : pdftex vimqrc.tex

% Italian translation by Roberto Pauletto

\input outopt.tex

% \pdfoutput=1
% \pdfpageheight=21cm
% \pdfpagewidth=29.7cm

% Font definitions
\font\bigbf=cmbx12
\font\smallrm=cmr8
\font\smalltt=cmtt8
\font\tinyit=cmmi5

\def\title#1{\hfil{\bf #1}\hfil\par\vskip 2pt\hrule}
\def\cm#1#2{{\tt#1}\dotfill#2\par}
\def\cn#1{\hfill$\lfloor$ #1\par}
\def\sect#1{\vskip 0.7cm {\it#1\/}\par}

% Characters definitions
\def\bs{$\backslash$}
\def\backspace{$\leftarrow$}
\def\ctrl{{\rm\char94}\kern-1pt}
\def\enter{$\hookleftarrow$}
\def\or{\thinspace{\tinyit{o}}\thinspace}
\def\key#1{$\langle${\rm{\it#1\/}}$\rangle$}
\def\rapos{\char125}
\def\lapos{\char123}
\def\bs{\char92}
\def\tild{\char126}

% Three columns definitions
\parindent 0pt
\nopagenumbers
\hoffset=-1.56cm
\voffset=-1.54cm
\newdimen\fullhsize
\fullhsize=27.9cm
\hsize=8.5cm
\vsize=19cm
\def\fullline{\hbox to\fullhsize}
\let\lr=L
\newbox\leftcolumn
\newbox\midcolumn
\output={
  \if L\lr
    \global\setbox\leftcolumn=\columnbox
    \global\let\lr=M
  \else\if M\lr
    \global\setbox\midcolumn=\columnbox
    \global\let\lr=R
  \else
    \tripleformat
    \global\let\lr=L
  \fi\fi
  \ifnum\outputpenalty>-20000
  \else
    \dosupereject
  \fi}
\def\tripleformat{
  \shipout\vbox{\fullline{\box\leftcolumn\hfil\box\midcolumn\hfil\columnbox}}
  \advancepageno}
\def\columnbox{\leftline{\pagebody}}

% Card content
% Header
%\hrule\vskip 3pt
\title{VIM: SCHEDA DI RIFERIMENTO RAPIDO}

\sect{Movimenti base}
\cm{h l k j}{un carattere a sx, dx, su, giu'}
\cm{b w}{parola/token a sx, dx}
\cm{ge e}{fine parola/token sx, dx}
\cm{\lapos\ \rapos}{inizio precedente/prossimo paragrafo}
\cm{( )}{inizio precedente, prossima frase}
\cm{0 gm}{inizio, meta' riga}
\cm{\^\ \$}{primo, ultimo carattere della riga}
\cm{$n$G $n$gg}{riga $n$, default ultima, prima}
\cm{$n$\%}{$n$ percento del file {\it($n$ deve essere indicato)\/}}
\cm{$n|$}{la colonna $n$ della riga corrente}   
\cm{\%}{trova prossima parentesi, commento, {\tt\#define}}
\cm{$n$H $n$L}{riga $n$ dall'inizio, fine della finestra}
\cm{M}{alla riga di mezzo della finestra}

\sect{Inserisci \& rimpiazza $\to$ modalita' inserimento}
\cm{i a}{inserisci prima, dopo il cursore}
\cm{I A}{inserisci all'inizio, fine della riga}
\cm{gI}{inserisci il testo nella prima colonna}
\cm{o O}{inserisci nuova riga sotto, sopra riga corrente}
\cm{r$c$}{rimpiazza il carattere al cursore con $c$}
\cm{gr$c$}{come {\tt r}, ma vai in modalita' inserimento}
\cm{R}{rimpiazza caratteri a partire dal cursore}
\cm{gR}{come {\tt R}, ma vai in mod. inserimento}
\cm{c$m$}{cambia il testo del comando di movimento $m$}
\cm{cc\or S}{cambia la riga corrente}
\cm{C}{cambia fino alla fine della riga}
\cm{s}{cambia un carattere e vai in mod. inserimento}
\cm{\tild}{scambia maiuscolo/minuscolo ad avanza il cursore}
\cm{g\tild{$m$}}{scambia maiuscolo/minuscolo per cmd. mov. $m$}
\cm{gu$m$ gU$m$}{minuscolo/maiuscolo testo cmd. mov. $m$}
\cm{$<$$m$ $>$$m$}{sposta sx, dx testo del comando di mov. $m$}
\cm{$n$$<$\kern-3pt$<$ $n$$>$\kern-3pt$>$}{sposta $n$ righe a sx, dx}

\sect{Cancellare}
\cm{x X}{cancella carattere al, prima del cursore}
\cm{d$m$}{cancella il testo del comando di movimento $m$}
\cm{dd D}{cancella la riga, fino alla fine della riga corrente}
\cm{J gJ}{unisci la riga corrente successiva, senza spazi}
\cm{:$r$d\enter}{cancella il gruppo di righe $r$ }
\cm{:$r$d$x$\enter}{sposta il gruppo di righe $r$ nel registro $x$}

\sect{Modalita' inserimento}
\cm{\ctrl V$c$ \ctrl V$n$}{inserice car. $c$ letterale, valore decimale di $n$}
% \cm{\ctrl V$n$}{insert decimal value of character}
\cm{\ctrl A}{inserisce il testo precedentemente inserito}
\cm{\ctrl @}{come {\tt\ctrl A} e va da modalita' inserimento $\to$ comandi}
\cm{\ctrl R$x$ \ctrl R\ctrl R$x$}{inserisce contenuto del registro $x$, letterale}
\cm{\ctrl N \ctrl P}{completamento del testo prima, dopo il cursore}
\cm{\ctrl W}{cancella la parola prima del cursore}
\cm{\ctrl U}{cancella tutti i caratteri inseriti nella riga corrente}
\cm{\ctrl D \ctrl T}{sposta a sx, dx della larghezza di uno shift}
\cm{\ctrl K$c_1$$c_2$\or $c_1$\kern-1pt\backspace$c_2$}{digita diagramma $\{c_1,c_2\}$}
\cm{\ctrl O$c$}{esegue $c$ in modalita' comandi temporanea}
\cm{\ctrl X\ctrl E \ctrl X\ctrl Y}{scorri in su, giu'}
\cm{\key{esc}\o \ctrl[}{vai modal. inserimento $\to$ modal. comandi}

\sect{Copiare}
\cm{"$x$}{usa registro $x$ per la prossima cancellazione, copia}
\cm{:reg\enter}{mostra il contenuto di tutti i registri}
\cm{:reg $x$\enter}{mostra il contenuto del registro $x$}
\cm{y$m$}{copia il testo del comando di movimento $m$}
\cm{yy\or Y}{copia la riga corrente nel registro}
\cm{p P}{metti registro dopo, prima del cursore}
\cm{]p [p}{come {\tt p}, {\tt P} con indentazione modificata}
\cm{gp gP}{come {\tt p}, {\tt P} lasciando il cursore dopo nuovo testo}

\sect{Inserimento avanzato}
\cm{g?$m$}{esegui codifica rot13 su comando movimento $m$}
\cm{$n$\ctrl A $n$\ctrl X}{$+n$, $-n$ del numero al cursore}
\cm{gq$m$}{formatta riga del movimento $m$ a larghezza fissa}
\cm{:$r$ce $w$\enter}{centra le righe nel gruppo $r$ a larghezza $w$}
\cm{:$r$le $i$\enter}{allinea a sx righe gruppo $r$ con indent. $i$}
\cm{:$r$ri $w$\enter}{allinea a dx righe gruppo $r$ a larghezza $w$}
\cm{!$m$$c$\enter}{filtra righe cmd. movimento $m$ con cmd. $c$}
\cm{$n$!!$c$\enter}{filtra le righe $n$ con il comando $c$}
\cm{:$r$!$c$\enter}{filtra gruppo di righe $r$ con il comando $c$}

\sect{Modalita' visuale}
\cm{v V \ctrl V}{inizio/fine evidenziazione car., righe, blocco}
\cm{o}{porta posizione cursore ad inizio evidenziazione}
\cm{gv}{inizia evidenziazione a precedente area evidenziata}
\cm{aw as ap}{seleziona una parola, frase, paragrafo}
\cm{ab aB}{seleziona un blocco ( ), un blocco {\tt\lapos} {\tt\rapos}}

\vskip 1cm
\sect{Annullamento, ripetizione \& registri}
\cm{u U}{annulla ultimo cmd ripristina ultima riga modif.}
\cm{.\thinspace\thinspace\ctrl R}{ripeti ultima modifica, ripristina  ultimo annullo}
\cm{$n$.\ }{ripeti ultimi cambiam. con conteggio sostit. da  $n$  }
\cm{q$c$ q$C$}{registra, aggiungi car. digitati nel registro $c$}
\cm{q}{interrompi registrazione}
\cm{@$c$}{esegui il contenuto del registro $c$}
\cm{@@}{ripeti il precedente comando {\tt @} }
\cm{:@$c$\enter}{esegui registro $c$ come comando {\it Eesec\/}}
\cm{:$r$g/$p$/$c$\enter}{esegui comando {\it Eesec\/} $c$ sul gruppo $r$}
\cn{in corrispondenza del modello $p$ }

\vskip -0.2cm
\sect{Movimenti complessi}
\cm{- +}{riga su, giu' al primo carattere non-blank}
\cm{B W}{una parola separata da spazio a sx, dx}
\cm{gE E}{fine parola separata da spazio a sx, dx}
\cm{$n$\_}{giu' a riga $n-1$ al primo carattere non-blank}
\cm{g0}{inizio riga sullo {\it schermo\/} }
\cm{g\^\ g\$}{primo, ultimo carattere della riga sullo {\it schermo\/}}
\cm{gk gj}{riga su, giu' sullo {\it schermo\/} }
\cm{f$c$ F$c$}{prossima, precedente occorrenza del carattere $c$}
\cm{t$c$ T$c$}{prima di prossima, precedente occorrenza di $c$}
\cm{; ,}{repeti ultimo {\tt fFtT}, nella direczione opposta}
\cm{[[ ]]}{all'inizio della sezione all'indietro, avanti}
\cm{[] ][}{alla fine della sezione all'indietro, avanti}
\cm{[( ])}{alla (, ) non chiusa all'indetro, avanti}
\cm{[\lapos\ ]\rapos}{alla  {\tt\lapos}, {\tt\rapos} non chiusa all'indetro, avanti}
\cm{[m ]m}{inizio del precedente, prossimo metodo  {\it Java\/} }
\cm{[\# ]\#}{{\tt\#if}, {\tt\#else}, {\tt\#endif} preced., seguente non chiuso}
\cm{[* ]*}{inzio fine di {\tt/* */} precedente, successivo}

\sect{Ricerca \& sostituzione}
\cm{/$s$\enter\ ?$s$\enter}{cerca in avanti, indietro per $s$}
\cm{/$s$/$o$\enter\ ?$s$?$o$\enter}{cerca avanti, indietro per $s$ con offset $o$}
\cm{n\or /\enter}{ripeti in avanti l'ultima ricerca}
\cm{N\or ?\enter}{ripeti all'indetro l'ultima ricerca}
\cm{\# *}{cerca all'indietro, avanti la parola al cursore}
\cm{g\# g*}{come sopra ma trova anche corrisp. parziali}
\cm{gd gD}{definizione globale, locale del simbolo al cursore}
\cm{:$r$s/$f$/$t$/$x$\enter}{sustituisci $f$ con $t$ nel raggio $r$}
\cn{$x:$ {\tt g}---tutte le occorrenze, {\tt c}---conferma modifiche}
\cm{:$r$s $x$\enter}{ripeti sostituzione con nuovi $r$ \& $x$}

\vskip1cm
\sect{Caratteri speciali in modelli di ricerca}
\cm{.\thinspace\thinspace\thinspace\ctrl\ \$}{qualsiasi singolo carattere, inizio e fine di riga}
\cm{\bs$<$ \bs$>$}{inizio, fine di parola}
\cm{[$c_1$-$c_2$]}{un singolo carattere nel gruppo $c_1..c_2$}
\cm{[\ctrl$c_1$-$c_2$]}{un singolo carattere non nel gruppo}
\cm{\bs i \bs k \bs I \bs K}{un identific., parola chiave; no cifre}
\cm{\bs f \bs p \bs F \bs P}{un nome file, car. stampabile; no cifre}
\cm{\bs s \bs S}{uno spazio, uno spazio non blank}
\cm{\bs e \bs t \bs r \bs b}{\key{esc}, \key{tab}, \key{\enter}, \key{$\gets$}}
\cm{\bs = * \bs +}{corrispond.  $0..1$, $0..\infty$, $1..\infty$ atomi precedenti}
\cm{\bs$|$}{separa due diramazioni ($\equiv$ {\it or\/})}
\cm{\bs( \bs)}{raggruppa modelli in un atomo}
\cm{\bs \& \bs $n$}{intero modello corrisp., l'ennesimo, {\tt()} gruppo}
\cm{\bs u \bs l}{il prossimo carattere reso maiuscolo, minuscolo}

\sect{Offsets in comandi di ricerca}
\cm{$n$\or +$n$}{$n$ righe in giu' in colonna 1}
\cm{-$n$}{$n$ righe in su in colonna 1}
\cm{e+$n$ e-$n$}{$n$ caratteri dx, sx verso fine corrispondenza}
\cm{s+$n$ s-$n$}{$n$ caratteri dx, sx verso inizio corrispondenza}
\cm{;$sc$}{esegui il comando di ricerca dal prossimo $sc$ }

\sect{Marcatori e movimenti}
\cm{m$c$}{marca la posizione corrente con mark $c\in[a..Z]$}
\cm{`$c$ `$C$}{vai al mark $c$ nel file corrente, $C$ in qualsiasi file}
\cm{`$0..9$}{vai all'ultima posizione di uscita}
\cm{`\/`  `\/"}{vai a posizione prima del salto, ultima modificata}
\cm{`[ `]}{inizio, fine testo su cui operato precedentemente}
\cm{:marks\enter}{visualizza l'intera lista dei mark}
\cm{:jumps\enter}{visualizza la lista dei salti}
\cm{$n$\ctrl O}{vai ennesima piu' vecchia posizione lista salti}
\cm{$n$\ctrl I}{vai ennesima piu' nuova posizione lista salti}

\sect{Mappatura tasti \& abbreviazioni}
\cm{:map $c$ $e$\enter}{mappa $c\mapsto e$ in mod. normale \& visuale}
\cm{:map!\ $c$ $e$\enter}{mappa $c\mapsto e$ mod. inser. \& e riga cmd}
\cm{:unmap $c$\enter\ :unmap!\ $c$\enter}{rimuovi mappatura di $c$}
\cm{:mk $f$\enter}{scrivi mappatura, impostaz. correnti al file $f$}
\cm{:ab $c$ $e$\enter}{aggiungi l'abbreviazione per $c\mapsto e$}
\cm{:ab $c$\enter}{mostra abbreviazioni che iniziano per $c$}
\cm{:una $c$\enter}{rimuovi l'abbreviazione $c$}

\sect{Tag}
\cm{:ta $t$\enter}{vai al tag $t$}
\cm{:$n$ta\enter}{vai all'ennesimo tag piu' nuovo in lista}
\cm{\ctrl ] \ctrl T}{vai al tag al cursore, ritorna dal tag}
\cm{:ts $t$\enter}{elenca tag corrisp., seleziona uno per salto}
\cm{:tj $t$\enter}{vai a tag, selezionane uno tra corrisp. multiple}
\cm{:tags\enter}{visualizza la lista dei tag}
\cm{:$n$po\enter\ :$n$\ctrl T\enter}{ritorna da, vai ennes. tag piu' vecchio}
% \cm{:$n$po\enter}{jump back from $n^{th}$ older tag in tag list}
\cm{:tl\enter}{vai all'ultimo tag corrispondente}
\cm{\ctrl W\rapos\ :pt $t$\enter}{anteprima del tag al cursore, del tag $t$}
\cm{\ctrl W]}{dividi la finestra e mostra il tag al cursore}
\cm{\ctrl Wz\or :pc\enter} {chiudi la finestra di anteprima del tag}

\sect{Scorrimento \& finestre multiple} 
\cm{\ctrl E \ctrl Y}{scorri una riga, su, giu'}
\cm{\ctrl D \ctrl U}{scorri mezza pagina su, giu'}
\cm{\ctrl F \ctrl B}{scorri una pagina su, giu'}
\cm{zt\or z\enter}{imposta riga corrente come inizio finestra}
\cm{zz\or z.\ }{imposta riga corrente al centro della finestra}
\cm{zb\or z-}{imposta riga corrente alla fine della finestra}
\cm{zh zl}{scorri un carattere a destra, sinistra}
\cm{zH zL}{scorri meta' schermata a destra, sinistra}
\cm{\ctrl Ws\or :split\enter}{dividi in due la finestra}
\cm{\ctrl Wn\or :new\enter}{crea una nuova finestra vuota}
\cm{\ctrl Wo\or :on\enter}{rendi finestra corrente la sola sullo schermo }
\cm{\ctrl Wj \ctrl Wk}{vai a finestra sotto, sopra }
\cm{\ctrl Ww \ctrl W\ctrl W}{vai a finestra sotto, sopra (in circolo)}

\sect{Esecuzione da riga comandi (\enter)}
\cm{:e $f$}{modifica file $f$, a meno di cambiamenti effettuati}
\cm{:e!\ $f$}{modifica file $f$ sempre (default ricarica corrente)}
\cm{:wn :wN}{scrivi il file e modifica il prossimo, precedente}
\cm{:n :N}{modifica prossimo, precedente file in lista}
\cm{:$r$w}{scrive raggio $r$ in file corrente}
\cm{:$r$w $f$}{scrivi raggio $r$ al file $f$}
\cm{:$r$w$>$\kern-3pt$>$$f$}{accoda il raggio $r$ al file $f$}
\cm{:q :q!}{ esci e conferma, esci ed annulla modifiche}
\cm{:wq\or :x\or ZZ}{scrivi il file corrente ed esci}
\cm{\key{up} \key{down}}{recupera comandi ad iniziare dal corrente}
\cm{:r $f$}{inserisci il contenuto del file $f$ sotto il cursore}
\cm{:r!\ $c$}{inserisci l'output del comando $c$ sotto il cursore}
\cm{:all}{apri finestra per ogni file in lista param. riga cmd}
\cm{:args}{visualizza la lista parametri riga comando}

\sect{Spostamenti da riga comandi}
\cm{, ;\ }{separa due numeri di riga, vai alla prima}
\cm{$n$}{il numero di riga assoluto $n$}
\cm{.\thinspace\thinspace\thinspace\$}{la riga corrente, l'ultima riga del file}
\cm{\% *}{l'intero file, l'area visuale}
\cm{'$t$}{la posizione del mark $t$}
\cm{/$p$/ ?$p$?}{la prossimo, precedente riga dove $p$ corrisponde}
\cm{+$n$ -$n$}{$+n$, $-n$ rispetto al numero precedente di riga}

\sect{Piegature}
\cm{zf$m$}{crea piegatura del movimento $m$}
\cm{:$r$fo}{crea piegatura per il gruppo $r$}
\cm{zd zE}{elimina piegatura al cursore, tutte in finestra}
\cm{zo zc zO zC}{apri, chiudi piegatura; ricorsivamente}
\cm{[z ]z}{vai a inizio, fine piegatura aperta corrente}
\cm{zj zk}{vai giu', su a inizio, fine  prossima piegatura}

\sect{Miscellanea}
\cm{:sh\enter\ :!  $c$\enter}{apri shell, esegui comando $c$ nella shell}
\cm{K}{cerca la parola chiave al cursore con {\tt man}}
\cm{:make\enter}{lancia {\tt make}, leggi gli errori e vai al primo}
\cm{:cn\enter\ :cp\enter}{visualizza prossimo, precedente errore}
\cm{:cl\enter\ :cf\enter}{visualizza tutti gli errori, leggi err. da file}
\cm{\ctrl L \ctrl G}{ridisegna schermo, mostra nome file e posizione}
\cm{g\ctrl G}{mostra colonna, riga, posizione carattere al cursore}
\cm{ga}{mostra valore A{\smallrm SCII} del carattere al cursore}
\cm{gf}{apri file il cui nome si trova al cursore}
\cm{:redir$>$$f$\enter}{redirigi l'output al file $f$}
\cm{:mkview $[f]$}{salva configurazione vista [al file $f$]}
\cm{:loadview $[f]$}{carica configurazione vista [da file $f$]}
\cm{\ctrl @ \ctrl K \ctrl \_\ \bs\ F$n$ \ctrl F$n$}{tasti non configurati }

% Footer
\def\translator{Roberto Pauletto}
\vfill \hrule\smallskip
{\smallrm Questa scheda puo' essere liberamente distribuita sotto
i termini della licenza pubblica generale GNU ---
Copyright \copyright\ {\oldstyle 2003} di Laurent Gr\'egoire
$\langle${\smalltt laurent.gregoire@icam.fr}$\rangle$ -- v1.5 --
L'autore non assume alcuna responsabilita' per qualsiasi errore 
su questa scheda. Per ultima versione: {\smalltt http://tnerual.eriogerg.free.fr/}}

% Ending
\supereject
\if L\lr \else\null\vfill\eject\fi
\if L\lr \else\null\vfill\eject\fi
\bye

% EOF
