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

% Note: Comment the following line and Uncomment the three next for PDF
% generation (command is pdftex vimqrc.tex).

% Portuguese translation by Paulo R. Ormenese

\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{ou}}\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 --- CART\~AO DE REFER\^ENCIA}

\sect{Movimentos b\'asicos}
\cm{h l k j}{caracter esq., dir., linha acima, abaixo}
\cm{b w}{palavra/token esquerda, direita}
\cm{ge e}{fim palavra/token esquerda, direita}
\cm{\lapos\ \rapos}{come\c co par\'agrafo anterior, posterior}
\cm{( )}{come\c co senten\c ca anterior, posterior}
\cm{0 gm}{come\c co, meio da linha}
\cm{\^\ \$}{primeiro, \'ultimo caracter da linha}
\cm{$n$G $n$gg}{linha $n$, padr\~ao o \'ultimo, primeiro}
\cm{$n$\%}{porcentagem $n$ do arquivo {\it($n$ deve existir)}}
\cm{$n|$}{coluna $n$ da linha atual}
\cm{\%}{acha pr\'oximo par\^entese, colchete, coment., {\tt\#define}}
\cm{$n$H $n$L}{linha $n$ do topo, base da janela}
\cm{M}{linha do meio da janela}

\sect{Inser\c c\~ao \& substitui\c c\~ao $\to$ modo insert}
\cm{i a}{insere antes, depois do cursor}
\cm{I A}{insere no in\'{\i}cio, fim da linha}
\cm{gI}{insere texto na primeira coluna}
\cm{o O}{abre nova linha abaixo, acima da linha atual}
\cm{r$c$}{substitui caracter sob cursor por $c$}
\cm{gr$c$}{como {\tt r}, mas sem afetar o layout}
\cm{R}{substitui caracteres come\c cando do cursor}
\cm{gR}{como {\tt R}, mas sem afetar o layout}
\cm{c$m$}{muda texto do comando de movimento $m$}
\cm{cc\or S}{muda linha atual}
\cm{C}{muda at\'e o fim da linha}
\cm{s}{muda um caracter e insere}
\cm{\tild}{muda mai\'usc./min\'usc. e avan\c ca cursor}
\cm{g\tild{$m$}}{muda mai\'usc./min\'usc. do movimento $m$}
\cm{gu$m$ gU$m$}{texto do movim. $m$ min\'usculo, mai\'usculo}
\cm{$<$$m$ $>$$m$}{desloca esq., dir. texto do movimento $m$}
\cm{$n$$<$\kern-3pt$<$ $n$$>$\kern-3pt$>$}{desloca $n$ linhas esquerda, direita}

\sect{Elimina\c c\~ao}
\cm{x X}{apaga caracter sob, antes do cursor}
\cm{d$m$}{apaga texto do comando movimento $m$}
\cm{dd D}{apaga linha atual, at\'e fim da linha}
\cm{J gJ}{junta linha atual com pr\'oxima, sem espa\c co}
\cm{:$r$d\enter}{apaga $r$ linhas}
\cm{:$r$d$x$\enter}{apaga $r$ linhas, p\~oe registrador $x$}

\sect{Modo Inser\c c\~ao}
\cm{\ctrl V$c$ \ctrl V$n$}{insere caracter $c$ literalmente, valor decimal $n$}
% \cm{\ctrl V$n$}{insert decimal value of character}
\cm{\ctrl A}{insere texto inserido anteriormente}
\cm{\ctrl @}{mesmo que {\tt\ctrl A} e p\'ara insert $\to$ modo comando}
\cm{\ctrl R$x$ \ctrl R\ctrl R$x$}{insere conte\'udo registrador $x$, literalmente}
\cm{\ctrl N \ctrl P}{completa texto antes, depois do cursor}
\cm{\ctrl W}{apaga palavra antes do cursor}
\cm{\ctrl U}{apaga todos caracteres inseridos linha atual}
\cm{\ctrl D \ctrl T}{desloca esquerda, direita largura 1 desloc.}
\cm{\ctrl K$c_1$$c_2$\or $c_1$\kern-1pt\backspace$c_2$}{entra d\'{\i}grafo $\{c_1,c_2\}$}
\cm{\ctrl O$c$}{executa $c$ em modo comando tempor\'ario}
\cm{\ctrl X\ctrl E \ctrl X\ctrl Y}{rola acima, abaixo}
\cm{\key{esc}\or \ctrl[}{abandona edi\c c\~ao $\to$ modo comando}

\sect{Copiando}
\cm{"$x$}{usa registrador $x$ para pr\'oximo delete, yank, put}
\cm{:reg\enter}{mostra o conte\'udo de todos os registradores}
\cm{:reg $x$\enter}{mostra conte\'udo dos registradores $x$}
\cm{y$m$}{copia texto do comando de movimento $m$}
\cm{yy\or Y}{copia texto da linha atual no registrador}
\cm{p P}{cola registrador depois, antes da posi\c c\~ao cursor}
\cm{]p [p}{como {\tt p}, {\tt P} com recuo ajustado}
\cm{gp gP}{como {\tt p}, {\tt P} deixando cursor depois texto novo}

\sect{Inser\c c\~ao Avan\c cada}
\cm{g?$m$}{faz codifica\c c\~ao rot13 no movimento $m$}
\cm{$n$\ctrl A $n$\ctrl X}{$+n$, $-n$ no n\'umero sob o cursor}
\cm{gq$m$}{formata linhas do mov. $m$ com largura fixada}
\cm{:$r$ce $w$\enter}{centra linhas na faixa $r$ para largura $w$}
\cm{:$r$le $i$\enter}{alinha esq. linhas na faixa $r$ com recuo $i$}
\cm{:$r$ri $w$\enter}{alinha dir. linhas na faixa $r$ para largura $w$}
\cm{!$m$$c$\enter}{filtra linhas do mov. $m$ atrav\'es comando $c$}
\cm{$n$!!$c$\enter}{filtra $n$ linhas atrav\'es do comando $c$}
\cm{:$r$!$c$\enter}{filtra faixa de $r$ linhas atrav\'es do comando $c$}

\sect{Modo Visual}
\cm{v V \ctrl V}{come\c ca/p\'ara destaque caract., linhas, bloco}
\cm{o}{troca posi\c c\~ao do cursor com in\'{\i}cio do destaque}
\cm{gv}{inicia destaque na area visual anterior}
\cm{aw as ap}{seleciona uma palavra, senten\c ca, par\'agrafo}
\cm{ab aB}{seleciona um bloco ( ), um bloco {\tt\lapos} {\tt\rapos}}

\vskip 1cm
\sect{Comandos desfazer \& repetir}
\cm{u U}{desfaz \'ultimo cmd, restaura \'ultima linha mudada}
\cm{.\thinspace\thinspace\ctrl R}{repete \'ultimas mudan\c cas, refaz \'ultimo desfazer}
\cm{$n$.\ }{repete \'ultimas mudan\c cas com cont. trocado por $n$}
\cm{q$c$ q$C$}{grava, anexa caracteres digitados no regist. $c$}
\cm{q}{p\'ara de gravar}
\cm{@$c$}{executa o conte\'udo do registrador $c$}
\cm{@@}{repete comando {\tt @} anterior}
\cm{:@$c$\enter}{executa registrador $c$ como comando {\it Ex}}
\cm{:$r$g/$p$/$c$\enter}{executa comando {\it Ex} $c$ na faixa $r$}
\cn{onde padr\~ao $p$ combinar}

\vskip -0.2cm
\sect{Movimento complexo}
\cm{- +}{linha acima/abaixo no $1^{o}$ caracter n\~ao-branco}
\cm{B W}{palavra separada por espa\c co a esq., a dir.}
\cm{gE E}{fim de palavra separada por espa\c co a esq., a dir.}
\cm{$n$\_}{desce $n-1$ linhas no $1^{o}$ caracter n\~ao-branco}
\cm{g0}{in\'{\i}cio da linha {\it screen}}
\cm{g\^\ g\$}{primeiro, \'ultimo caracter da linha {\it screen}}
\cm{gk gj}{linha {\it screen} acima, abaixo}
\cm{f$c$ F$c$}{ocorr\^encia seguinte, anterior do caracter $c$}
\cm{t$c$ T$c$}{antes da ocorr\^encia seguinte, anterior de $c$}
\cm{; ,}{repete \'ultimo {\tt fFtT}, na dire\c c\~ao oposta}
\cm{[[ ]]}{come\c co de se\c c\~ao atr\'as, a frente}
\cm{[] ][}{fim de se\c c\~ao atr\'as, a frente}
\cm{[( ])}{(, ) n\~ao fechado atr\'as, a frente}
\cm{[\lapos\ [\rapos}{{\tt\lapos}, {\tt\rapos} n\~ao fechado atr\'as, a frente}
\cm{[m ]m}{come\c co, fim de java method atr\'as, a frente}
\cm{[\# ]\#}{{\tt\#if}, {\tt\#else}, {\tt\#endif} n\~ao fechado atr\'as, a frente}
\cm{[* ]*}{come\c co, fim de {\tt/* */} atr\'as, a frente}

\sect{Busca \& substitui\c c\~ao}
\cm{/$s$\enter\ ?$s$\enter}{procura a frente, atr\'as por $s$}
\cm{/$s$/$o$\enter\ ?$s$?$o$\enter}{procura $s$ atr\'as, frente com desloc. $o$}
\cm{n\or /\enter}{repete \'ultima busca a frente}
\cm{N\or ?\enter}{repete \'ultima busca atr\'as}
\cm{\# *}{procura atr\'as, a frente palavra sob o cursor}
\cm{g\# g*}{o mesmo, mas busca tamb\'em parcial}
\cm{gd gD}{defini\c c\~ao local, global de s\'{\i}mbolo sob cursor}
\cm{:$r$s/$f$/$t$/$x$\enter}{substitui $f$ por $t$ na faixa $r$}
\cn{$x:$ {\tt g}---todas as ocorr\^encias, {\tt c}---confirma mudan\c cas}
\cm{:$r$s $x$\enter}{repete substitui\c c\~ao com novos $r$ \& $x$}

\vskip1cm
\sect{Caracteres especiais em padr\~oes de busca}
\cm{.\thinspace\thinspace\thinspace\ctrl\ \$}{qualquer caracter, come\c co, fim de linha}
\cm{\bs$<$ \bs$>$}{in\'{\i}cio, fim de linha}
\cm{[$c_1$-$c_2$]}{um caracter na faixa $c_1..c_2$}
\cm{[\ctrl$c_1$-$c_2$]}{um caracter fora da faixa}
\cm{\bs i \bs I}{um identificador, excluindo d\'{\i}gitos}
\cm{\bs k \bs K}{uma palavra-chave, excluindo d\'{\i}gitos}
\cm{\bs f \bs F}{um nome de arquivo, excluindo d\'{\i}gitos}
\cm{\bs p \bs P}{um caracter imprim\'{\i}vel, excluindo d\'{\i}gitos}
\cm{\bs s \bs S}{um espa\c co em branco, um espa\c co n\~ao-branco}
\cm{\bs e \bs t \bs r \bs b}{\key{esc}, \key{tab}, \key{\enter}, \key{$\gets$}}
\cm{\bs = * \bs +}{combina $0..1$, $0..\infty$, $1..\infty$ de \'atomos preced.}
\cm{\bs$|$}{separa dois ramos ($\equiv$ {\it or})}
\cm{\bs( \bs)}{agrupa padr\~oes em um \'atomo}

\sect{Deslocamentos em comandos de busca}
\cm{$n$\or +$n$}{linha $n$ abaixo na coluna 1}
\cm{-$n$}{linha $n$ acima na coluna 1}
\cm{e+$n$ e-$n$}{$n$ caracteres a dir., esq. do fim da combin.}
\cm{s+$n$ s-$n$}{$n$ caracteres a dir., esq. do come\c co combin.}
\cm{;$sc$}{executa comando de busca $sc$ pr\'oximo}

\sect{Marcas e movimentos}
\cm{m$c$}{marca posi\c c\~ao atual com marca $c\in[a..Z]$}
\cm{`$c$ `$C$}{vai para marca $c$ no arquivo atual, $C$ em qualquer arq.}
\cm{`$0..9$}{vai para \'ultima posi\c c\~ao}
\cm{`\/`  `\/"}{vai para posi\c c\~ao antes salto, na \'ultima edi\c c\~ao}
\cm{`[ `]}{vai para come\c co, fim texto operado anterior}
\cm{:marks\enter}{mostra  lista de marcas ativas}
\cm{:jumps\enter}{mostra lista de saltos}
\cm{$n$\ctrl O}{vai para $n^{a}$ posi\c c\~ao mais velha na lista saltos}
\cm{$n$\ctrl I}{vai para $n^{a}$ posi\c c\~ao mais nova na lista saltos}

\sect{Mapeamento de teclas \& abrevia\c c\~oes}
\cm{:map $c$ $e$\enter}{mapeia $c\mapsto e$ em modo normal \& visual}
\cm{:map!\ $c$ $e$\enter}{mapeia $c\mapsto e$ em modo \& linha-cmd}
\cm{:unmap $c$\enter\ :unmap!\ $c$\enter}{remove mapeamento $c$}
\cm{:mk $f$\enter}{escreve mapeamentos, ajustes... atuais no arquivo $f$}
\cm{:ab $c$ $e$\enter}{adiciona abrevia\c c\~ao para $c\mapsto e$}
\cm{:ab $c$\enter}{mostra abrevia\c c\~ao come\c cando com $c$}
\cm{:una $c$\enter}{remove abrevia\c c\~ao $c$}

\sect{Tags}
\cm{:ta $t$\enter}{pula para tag $t$}
\cm{:$n$ta\enter}{pula para $n^{a}$ tag mais nova na lista}
\cm{\ctrl ] \ctrl T}{pula para tag sob cursor, retorna da tag}
\cm{:ts $t$\enter}{lista tags que comb. e seleciona uma p/ pular}
\cm{:tj $t$\enter}{pula para tag ou seleciona uma se v\'arias}
\cm{:tags\enter}{mostra lista de tags}
\cm{:$n$po\enter\ :$n$\ctrl T\enter}{pula atr\'as de, para $n^{a}$ tag antiga}
% \cm{:$n$po\enter}{jump back from $n^{th}$ older tag in tag list}
\cm{:tl\enter}{pula para \'ultima tag que combina}
\cm{\ctrl W\rapos\ :pt $t$\enter}{prev\^e tag sob cursor, tag $t$}
\cm{\ctrl W]}{divide janela e mostra tag sob cursor}
\cm{\ctrl Wz\or :pc\enter}{fecha janela visualiza\c c\~ao tag}

\sect{Rolagem \& multi-janela}
\cm{\ctrl E \ctrl Y}{rola linha acima, abaixo}
\cm{\ctrl D \ctrl U}{rola meia p\'agina acima, abaixo}
\cm{\ctrl F \ctrl B}{rola p\'agina acima, abaixo}
\cm{zt\or z\enter}{p\~oe linha atual topo da janela}
\cm{zz\or z.\ }{p\~oe linha atual centro da janela }
\cm{zb\or z-}{p\~oe linha atual base da janela}
\cm{zh zl}{rola um caracter a direita, esquerda}
\cm{zH zL}{rola meia tela a direita, esquerda}
\cm{\ctrl Ws\or :split\enter}{divide janela em duas}
\cm{\ctrl Wn\or :new\enter}{cria nova janela vazia}
\cm{\ctrl Wo\or :on\enter}{coloca janela atua em uma tela}
\cm{\ctrl Wj \ctrl Wk}{move para janela abaixo, acima}
\cm{\ctrl Ww \ctrl W\ctrl W}{move para janela abaixo, acima (troca)}

\sect{Comandos Ex (\enter)}
\cm{:e $f$}{edita arquivo $f$, a menos que modificado}
\cm{:e!\ $f$}{edita arq. $f$ sempre (por padr\~ao rel\^e atual)}
\cm{:wn :wN}{grava arquivo e edita pr\'oximo, anterior}
\cm{:n :N}{edita arquivo seguinte, anterior na lista}
\cm{:$r$w}{grava faixa $r$ no arquivo atual}
\cm{:$r$w $f$}{grava faixa $r$ no arquivo $f$}
\cm{:$r$w$>$\kern-3pt$>$$f$}{adiciona faixa $r$ no arquivo $f$}
\cm{:q :q!}{sai e confirma, sai e descarta mudan\c cas}
\cm{:wq\or :x\or ZZ}{grava no arquivo atual e sai}
\cm{\key{up} \key{down}}{chama comandos come\c cando com atual}
\cm{:r $f$}{insere conte\'udo do arquivo $f$ abaixo cursor}
\cm{:r!\ $c$}{insere sa\'{\i}da comando $c$ abaixo cursor}
\cm{:all}{abre janela para cada arquivo na lista argtos.}
\cm{:args}{mostra a lista de argumentos}

\sect{Faixas Ex}
\cm{, ;\ }{separa dois n\'umeros linhas, def. para $1^{a}$ linha}
\cm{$n$}{um n\'umero de linha $n$ absoluto}
\cm{.\thinspace\thinspace\thinspace\$}{linha atual, \'ultima linha no arquivo}
\cm{\% *}{arquivo todo, area visual}
\cm{'$t$}{posi\c c\~ao da marca $t$}
\cm{/$p$/ ?$p$?}{linha seguinte, anterior onde $p$ combina}
\cm{+$n$ -$n$}{$+n$, $-n$ at\'e n\'umero linha precedente}

\sect{Miscel\^anea}
\cm{:sh\enter\ :!$c$\enter}{come\c ca shell, executa cmdo. $c$ em shell}
\cm{K}{procura palavra-chave sob cursor com {\tt man}}
\cm{:make\enter}{come\c ca {\tt make}, l\^e erros e vai ao primeiro}
\cm{:cn\enter\ :cp\enter}{mostra erro seguinte, anterior}
\cm{:cl\enter\ :cf\enter}{lista erros, l\^e erros do arquivo}
\cm{\ctrl L \ctrl G}{redesenha tela, mostra nome arquivo e posi\c c\~ao}
\cm{g\ctrl G}{mostra coluna cursor, linha e posi\c c\~ao caracter}
\cm{ga}{mostra valor A{\smallrm SCII} do caracter sob cursor}
\cm{gf}{abre arquivo cujo nome est\'a sob cursor}
\cm{:redir$>$$f$\enter}{redireciona sa\'{\i}da para arquivo $f$}
\cm{\ctrl @ \ctrl K \ctrl \_\ \bs}{teclas sem uso, dispon\'{\i}veis para mapear}

% Footer
\def\translator{Paulo R. Ormenese}
\vfill \hrule\smallskip
{\smallrm Este cart\~ao pode ser distribu\'{\i}do livremente sob
os termos da licen\c ca p\'ublica geral GNU ---
Copyright \copyright\ {\oldstyle 2002} por Laurent Gr\'egoire
$\langle${\smalltt laurent.gregoire@icam.fr}$\rangle$ --- v1.5 ---
O autor n\~ao se responsabiliza por quaisquer erros nesse cart\~ao. A \'ultima
vers\~ao pode ser encontrada em {\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
