Este documento é um livro sobre o editor de texto Vim escrito em português. O livro é um projeto colaborativo e de código aberto que visa fornecer uma referência prática e confiável sobre o Vim.
2. o editor de texto Vim
“Um livro escrito em portuguˆes sobre o editor de
texto Vim. A ideia ´e que este material cres¸ca e
torne-se uma referˆencia confi´avel e pr´atica. Use este
livro nos termos da Licen¸ca de Documenta¸c˜ao Livre
GNU (GFDL).”
Este trabalho est´a em constante aprimoramento,
e ´e fruto da colabora¸c˜ao de volunt´arios. Participe
do desenvolvimento enviando sugest˜oes e melhorias;
acesse o site do projeto no endere¸co:
http://code.google.com/p/vimbook
Vers˜ao gerada em
31 de Agosto de 2009
3. Autores
S´ergio Luiz Ara´ujo Silva <voyeg3r@gmail.com>
Douglas Adriano Augusto <daaugusto@gmail.com>
Eust´aquio Rangel <eustaquiorangel@gmail.com>
Eduardo Otubo <eduardo.otubo@gmail.com>
Gustavo Dutra <gustavotkg@gmail.com>
Jo˜ao Felipe Mitre <jfmitre@gmail.com>
Willian Molinari <willian.molinari@gmail.com>
...
...
11. Cap´ıtulo 1
Introdu¸c˜ao
A edi¸c˜ao de texto ´e uma das tarefas mais frequentemente executadas por seres
humanos em ambientes computacionais, em qualquer n´ıvel. Usu´arios finais,
administradores de sistemas, programadores de software, desenvolvedores web,
e tantas outras categorias, todos eles, constantemente, necessitam editar textos.
Usu´arios finais editam texto para criar documentos, enviar e-mails, atualizar
o blog, escrever recados ou simplesmente trocar mensagens instantˆaneas pela
internet. Administradores de sistemas editam arquivos de configura¸c˜ao, criam
regras de seguran¸ca, editam scripts e manipulam sa´ıdas de comandos arma-
zenados em arquivos de texto. Programadores desenvolvem c´odigos-fonte e a
documenta¸c˜ao de programas essencialmente em editores de texto. Desenvolve-
dores web interagem com editores de texto para criarem layout e dinˆamica de
sites.
Tamanha ´e a frequˆencia e onipresen¸ca da tarefa de edi¸c˜ao de texto que a efici-
ˆencia, flexibilidade e o repert´orio de ferramentas de editores de texto tornam-se
quesitos cr´ıticos para se atingir produtividade e conforto na edi¸c˜ao de textos.
Qualquer tarefa de aprendizado requer um certo esfor¸co. Todo programa intro-
duz novos conceitos, op¸c˜oes e configura¸c˜oes que transformam o modus operanti
do usu´ario. Em princ´ıpio, quanto maior o esfor¸co, maior o benef´ıcio. Quem quer
apenas escrever textos, pode-se contentar com um editor b´asico, cuja as ´unicas
op¸c˜oes s˜ao digitar o texto, abrir e salvar o documento ou pode utilizar um editor
que permita pr´e-configurar a¸c˜oes, formatar o conte´udo, revisar a ortografia, etc,
al´em da a¸c˜ao b´asica que ´e escrever textos.
Qualquer usu´ario de computador pode abrir o primeiro tipo de editor e imediata-
mente come¸car a escrever, a curto prazo, sua a¸c˜ao ter´a consequˆencias imediatas
e n˜ao requer conhecimentos adicionais. Por outro lado, esse usu´ario ter´a que
fazer esfor¸co para digitar o mesmos cabe¸calho todos os dias.
O outro tipo de editor permite que o usu´ario pr´e-configure o cabe¸calho do do-
cumento e todos os dias esse trecho j´a estar´a digitado. Em contrapartida, o
usu´ario deve aprender como pr´e-configurar o editor. O que requer esfor¸co para
aprender a utilizar o programa escolhido. O benef´ıcio somente ser´a observado
a m´edio/longo prazo, quando o tempo ganho ao utilizar a configura¸c˜ao ser´a
superior ao tempo consumido aprendendo sobre o programa.
12. 2 Introdu¸c˜ao
O “Vim”1
´e um editor de texto extremamente configur´avel, criado para permitir
a edi¸c˜ao de forma eficiente, tornando-a produtiva e confort´avel. Tamb´em ´e uma
aprimora¸c˜ao do editor “Vi”, um tradicional programa dos sistemas Unix. Possui
uma s´erie de mudan¸cas em rela¸c˜ao a este ´ultimo. O pr´oprio slogan do Vim ´e
Vi IMproved, ou seja, Vi Melhorado. O Vim ´e t˜ao conhecido e respeitado entre
programadores, e t˜ao ´util para programa¸c˜ao, que muitos o consideram uma ver-
dadeira “IDE (Integrated Development Environment, em portuguˆes, Ambiente
Integrado de Desenvolvimento)”.
Ele ´e capaz de reconhecer mais de 500 sintaxes de linguagens de programa¸c˜ao
e marca¸c˜ao, possui mapeamento para teclas, macros, abrevia¸c˜oes, busca por
Express˜oes Regulares2
, entre outras facilidades.
A figura 1.1 mostra o vim sendo usando para editar o arquivo o desse livro sobre
vim.
Figura 1.1: Usando o vim para editar o c´odigo em LATEX
O Vim conta com uma comunidade bastante atuante e ´e, ao lado do Emacs3
,
um dos editores mais usados nos sistemas GNU/Linux4
, embora esteja tamb´em
dispon´ıvel em outros sistemas, como o Windows e o Macintosh.
1.1 Instala¸c˜ao do Vim
:h install
1.1.1 Instala¸c˜ao no Windows
H´a uma vers˜ao gr´afica do Vim dispon´ıvel para v´arios sistemas operacionais,
incluindo o Windows; esta vers˜ao pode ser encontrada no site oficial [1]. Para
1Vim - http://www.vim.org
2Express˜oes Regulares - http://guia-er.sourceforge.net/guia-er.html
3Emacs - http://www.gnu.org/software/emacs/
4O kernel Linux sem os programas GNU n˜ao serviria para muita coisa.
13. 1.2 Dicas iniciais 3
instal´a-lo basta baixar o instalador no link indicado e dispar´a-lo com um duplo
clique (este procedimento requer privil´egios de administrador).
1.1.2 Instala¸c˜ao no GNU/Linux
A maioria das distribui¸c˜oes GNU/Linux traz o Vim em seus reposit´orios, sendo
que ´e bastante comum o Vim j´a vir inclu´ıdo na instala¸c˜ao t´ıpica da distribui¸c˜ao.
A forma de instala¸c˜ao prefer´ıvel depende do Vim:
• J´a vir instalado por default – neste caso nada precisa ser feito.
• Estar dispon´ıvel no reposit´orio, mas n˜ao instalado – em distribui¸c˜oes de-
rivadas da Debian GNU/Linux5
, a instala¸c˜ao do Vim atrav´es dos reposi-
t´orios ´e usualmente executada digitando-se ‘apt-get install vim’6
em
um terminal (este procedimento requer privil´egios de administrador e, ti-
picamente, conex˜ao com a internet).
Algumas distribui¸c˜oes GNU/Linux dividem o programa vim em v´arios pa-
cotes. Pacotes adicionais como gvim, vim-enhanced, vim-phython7
, entre
outros, representam diferentes vers˜oes do mesmo aplicativo. O gvim ´e a
vers˜ao gr´afica do Vim e o vim-enhanced ´e uma vers˜ao do vim compilada
com um suporte interno ao Python8
. A alternativa para resolver esse
problema ´e buscar na documenta¸c˜ao da distribui¸c˜ao o que significa cada
pacote.
• N˜ao estar dispon´ıvel no reposit´orio da distribui¸c˜ao – cen´ario muito im-
prov´avel, mas nas sua ocorrˆencia o Vim pode ser instalado atrav´es da
compila¸c˜ao do c´odigo-fonte; basta seguir as instru¸c˜oes do site oficial [1].
1.2 Dicas iniciais
Ao longo do livro alguns comandos ou dicas podem estar duplicados, o que ´e ´util
devido ao contexto e tamb´em porque o aprendizado por satura¸c˜ao ´e um ´otimo
recurso. Ao perceber uma dica duplicada, antes de reclamar veja se j´a sabe o
que est´a sendo passado. Contudo dicas e sugest˜oes ser˜ao bem vindas!
Para abrir um arquivo com Vim digite num terminal:
vim texto.txt
onde texto.txt ´e o nome do arquivo que deseja-se criar ou editar.
Em algumas distribui¸c˜oes, pode-se usar o comando vi ao inv´es de vim.
5Debian GNU/Linux - http://www.debian.org/index.pt.html
6Recomenda-se tamb´em instalar a documenta¸c˜ao em HTML do Vim: ‘apt-get install
vim-doc’
7Para ubuntu e Debian
8O Python (http://www.python.org) ´e uma linguagem de programa¸c˜ao orientada a objetos
muito comum no meio profissional e acadˆemico
14. 4 Introdu¸c˜ao
1.3 Ajuda integrada
O Vim possui uma ajuda integrada muito completa, s˜ao mais de 100 arquivos
somando milhares de linhas. O ´unico inconveniente ´e n˜ao haver ainda tradu¸c˜ao
para o portuguˆes, sendo o inglˆes seu idioma oficial; entretanto, as explica¸c˜oes
costumam ser sint´eticas e diretas, de forma que no¸c˜oes em inglˆes seriam sufici-
entes para a compreens˜ao de grande parte do conte´udo da ajuda integrada.
Obs: No Vim quase todos os comandos podem ser abreviados, no caso “help”
pode ser chamado por“h”e assim por diante. Um comando s´o pode ser abreviado
at´e o ponto em que este nome mais curto n˜ao coincida com o nome de algum
outro comando existente. Para chamar a ajuda do Vim pressione ‘Esc’ e em
seguida:
:help .... vers~ao longa, ou
:h ....... vers~ao abreviada
ou simplesmente ‘F1’.
Siga os links usando o atalho ‘ctrl+]’, em modo gr´afico o clique com o mouse
tamb´em funciona, e para voltar use ‘ctrl+o’ ou ‘ctrl+t’ Para as situa¸c˜oes de
desespero pode-se digitar:
:help!
Quando um comando puder ser abreviado poder´a aparecer desta forma:
‘:so[urce]’. Deste modo se est´a indicando que o comando ‘:source’ pode ser
usado de forma abreviada, no caso ‘:so’.
1.4 Em caso de erros
Recarregue o arquivo que est´a sendo editado pressionando ‘Esc’ e em seguida
usando o comando ‘:e’. ou simplesmente inicie outro arquivo ignorando o atual,
com o comando ‘:enew!’, ou saia do arquivo sem modifica-lo, com ‘:q!’. Pode-se
ainda tentar gravar for¸cado com o comando ‘:wq!’
1.5 Como interpretar atalhos e comandos
A tecla “Ctrl” ´e representada na maioria dos manuais e na ajuda pelo carac-
tere “^” circunflexo, ou seja, o atalho Ctrl-L aparecer´a assim:
^L
No arquivo de configura¸c˜ao do Vim, um “Enter” pode aparecer como:
cr
Para saber mais sobre como usar atalhos no Vim veja a se¸c˜ao 12.8 na p´agina 83
e para ler sobre o arquivo de configura¸c˜ao veja o cap´ıtulo 12 na p´agina 79.
15. 1.6 Modos de opera¸c˜ao 5
1.6 Modos de opera¸c˜ao
A tabela abaixo mostra uma referˆencia r´apida para os modos de opera¸c˜ao do
Vim, a seguir mais detalhes sobre cada um dos modos.
Modo Descri¸c˜ao Atalho
Normal Para deletar, copiar, formatar, etc Esc
Inser¸c˜ao Prioritariamente, digita¸c˜ao de texto i,a,I,A,o,O
Visual Sele¸c˜ao de blocos verticais e linhas inteiras V, v, Ctrl-v
Comando Uma verdadeira linguagem de programa¸c˜ao Esc:
Em oposi¸c˜ao `a esmagadora maioria dos editores o Vim ´e um editor que tra-
balha com “modos de opera¸c˜ao (modo de inser¸c˜ao, modo normal, modo visual
e etc)”, o que a princ´ıpio dificulta a vida do iniciante, mas abre um universo
de possibilidades, pois ao trabalhar com modos distintos uma tecla de atalho
pode ter v´arios significados, exemplificando: Em modo normal pressionar ‘dd’
apaga a linha atual, j´a em modo de inser¸c˜ao ele ir´a se comportar como se vocˆe
estivesse usando qualquer outro editor, ou seja, ir´a inserir duas vezes a letra ‘d’.
Em modo normal pressionar a tecla ‘v’ inicia uma sele¸c˜ao visual (use as setas
de dire¸c˜ao). Para sair do novo visual Esc. Como um dos princ´ıpios do vim
´e agilidade pode-se usar ao inv´es de setas (em modo normal) as letras h,l,k,j
como se fossem setas:
k
h l
j
Imagine as letras acima como teclas de dire¸c˜ao, a letra ‘k’ ´e uma seta acima a
letra ‘j’ ´e uma seta abaixo e assim por diante.
1.7 Entrando em modo de edi¸c˜ao
Estando no modo normal, digita-se:
a .... inicia inser¸c~ao de texto ap´os o caractere atual
i .... inicia inser¸c~ao de texto antes do caractere atual
A .... inicia inser¸c~ao de texto no final da linha
I .... inicia inser¸c~ao de texto no come¸co da linha
o .... inicia inser¸c~ao de texto na linha abaixo
O .... inicia inser¸c~ao de texto na linha acima
Outra possibilidade ´e utilizar a tecla Insert para entrar no modo de inser¸c˜ao
de texto antes do caractere atual, ou seja, o mesmo que a tecla i. Uma vez no
modo de inser¸c˜ao, a tecla Insert permite alternar o modo de digita¸c˜ao de
inser¸c˜ao de simples de caracteres para substitui¸c˜ao de caracteres.
Agora come¸camos a sentir o gostinho de usar o Vim, uma tecla seja mai´uscula
ou min´uscula, faz muita diferen¸ca se vocˆe n˜ao estiver em modo de inser¸c˜ao, e
para sair do modo de inser¸c˜ao e voltar ao modo normal sempre use Esc.
16. 6 Introdu¸c˜ao
1.8 Erros comuns
• Estando em modo de inser¸c˜ao pressionar ‘j’ na inten¸c˜ao de rolar o docu-
mento, neste caso estaremos inserindo simplesmente a letra ‘j’.
• Estando em modo normal acionar acidentalmente o “Caps Lock” e ten-
tar rolar o documento usando a letra “J”, o efeito ´e a jun¸c˜ao das linhas,
ali´as um ´otimo recurso quando a inten¸c˜ao ´e de fato esta.
• Em modo normal tentar digitar um n´umero seguido de uma palavra e ao
perceber que nada est´a sendo digitado, iniciar o modo de inser¸c˜ao, digi-
tando por fim o que se queria, o resultado ´e que o n´umero que foi digitado
inicialmente vira um quantificador para o que se digitou ao entrar no modo
de inser¸c˜ao. A palavra aparecer´a repetida na quantidade do n´umero di-
gitado. Assim, se vocˆe quiser digitar 10 vezes “isto ´e um teste” fa¸ca
assim:
Esc ........... se assegure de estar em modo normal
10 .............. quantificador
i ............... entra no modo de inser¸c~ao
isto ´e um teste Enter Esc
Alguns atalhos ´uteis. . .
Ctrl-O ..... comando do modo normal no modo insert
i Ctrl-a ... repetir a ´ultima inser¸c~ao
@: ......... repetir o ´ultimo comando
Shift-insert colar texto da ´area de transfer^encia
gi ......... modo de inser¸c~ao no mesmo ponto da ´ultima vez
gv ......... repete sele¸c~ao visual
Para saber mais sobre repeti¸c˜ao de comandos veja o cap´ıtulo 8, na p´agina 60.
No Vim, cada arquivo aberto ´e chamado de buffer, ou seja, dados carregados
na mem´oria. Vocˆe pode acessar o mesmo buffer em mais de uma janela, bem
como dividir a janela em v´arios buffers distintos o que veremos mais adiante.
17. Cap´ıtulo 2
Editando
A principal fun¸c˜ao de um editor de textos ´e editar textos. Parece ´obvio, mas
em meio a in´umeros recursos extras essa simples e crucial fun¸c˜ao perde-se entre
todos os demais.
2.1 Abrindo o arquivo para a edi¸c˜ao
Portanto, a primeira coisa a fazer ´e abrir um arquivo. Como visto, para abrir
um arquivo com Vim, digite em um terminal:
vim texto.txt
onde texto.txt ´e o nome do arquivo que deseja-se criar ou editar.
Caso deseje abrir o arquivo na linha 10, usa-se:
vim +10 /caminho/para/o/arquivo
se quiser abrir o arquivo na linha que cont´em um determinado padr˜ao , digite:
vim +/padr~ao arquivo
Caso o padr˜ao tenha espa¸cos no nome coloque entre aspas ou use escape “”
a fim de n˜ao obter erro.
Se o vim for aberto sem indica¸c˜ao de arquivo pode-se indicar o arquivo a ser
editado em modo de comando desta forma:
:e /home/usuario/arquivo
2.2 Escrevendo o texto
O Vim ´e um editor que possu´ı diferentes modos de edi¸c˜ao. Entre eles est´a o
modo de inser¸c˜ao, que ´e o modo onde escreve-se o texto naturalmente.
18. 8 Editando
Para se entrar em modo de inser¸c˜ao, estando em modo normal, pode-se pressi-
onar qualquer uma das teclas abaixo:
i ..... entra no modo de inser¸c~ao antes do caractere atual
I ..... entra no modo de inser¸c~ao no come¸co da linha
a ..... entra no modo de inser¸c~ao ap´os o caractere atual
A ..... entra no modo de inser¸c~ao no final da linha
o ..... entra no modo de inser¸c~ao uma linha abaixo
O ..... entra em modo de inser¸c~ao uma linha cima
Esc . sai do modo de inser¸c~ao
Uma vez no modo de inser¸c˜ao todas as teclas s˜ao exatamente como nos outros
editores simples, caracteres que constituem o conte´udo do texto sendo digitado.
O que inclui as teclas de edi¸c˜ao de caracteres.
Para salvar o conte´udo escrito, digite a tecla Esc para sair do modo de inser¸c˜ao
e digite o comando ‘:w’ para gravar o conte´udo. Caso queira sair do editor, digite
o comando: ‘:q’ caso tenha ocorrido modifica¸c˜oes no arquivo desde que ele foi
salvo pela ´ultima vez haver´a uma mensagem informando que o documento foi
modificado e n˜ao foi salvo, nesse caso, digite o comando ‘:q! para fechar o Vim
sem salvar as ´ultimas modifica¸c˜oes feitas. Caso queira salvar e sair do arquivo,
digite o comando ‘:wq’
Nesse ponto, conhece-se o vim de forma suficiente para editar qualquer coisa
nele. Daqui por diante o que existe s˜ao as formas de realizar a edi¸c˜ao do arquivo
com maior naturalidade e produtividade.
O usu´ario iniciante do Vim pode cometer o erro de tentar decorar todos os
comandos que ser˜ao apresentados. N˜ao fa¸ca isso. Tentar decorar comando ´e
exatamente o caminho contr´ario da naturalidade exigida por um editor texto
para aumentar a produtividade.
Ao contr´ario, sugere-se que leia-se todo o conte´udo. Identifique quais s˜ao as
atividades de maior recorrˆencia no estilo individual de escrita e busque como
realizar tais fun¸c˜oes com mais fluˆencia nesse editor. A pr´atica levar´a ao uso de
fluente desse comandos principais, abrindo espa¸co para os demais comandos.
Isso n˜ao impede que o usu´ario experimente cada comando conforme for lendo.
De fato, essa pr´atica pode ajudar a selecionar as formas de edi¸c˜ao que lhe s˜ao
mais simp´aticas ao uso.
2.3 Copiar, Colar e Deletar
:h delete, d
No modo normal, o ato de deletar ou eliminar o texto est´a associado `a letra
“d”. No modo de inser¸c˜ao as teclas usuais tamb´em funcionam.
dd .... deleta linha atual
D ..... deleta restante da linha
d$ .... deleta do ponto atual at´e o final da linha
d^ .... deleta do cursor ao primeiro caractere n~ao-nulo da
19. 2.3 Copiar, Colar e Deletar 9
linha
d0 .... deleta do cursor ao in´ıcio da linha
Pode-se combinar o comando de dele¸c˜ao “d” com o comando de movimento
(considere o modo normal) para apagar at´e a pr´oxima v´ırgula use: “df,”.
Copiar est´a associado `a letra “y”.
yy .... copia a linha atual
Y ..... copia a linha atual
ye .... copia do cursor ao fim da palavra
yb .... copia do come¸co da palavra ao cursor
O que foi deletado ou copiado pode ser colado:
p .... cola o que foi copiado ou deletado abaixo
P .... cola o que foi copiado ou deletado acima
[p ... cola o que foi copiado ou deletado antes do cursor
]p ... cola o que foi copiado ou deletado ap´os o cursor
2.3.1 Deletando uma parte do texto
:h deleting
O comando ‘d’ remove o conte´udo para a mem´oria.
x .... apaga o caractere sob o cursor
xp ... troca letras de lugar
ddp .. troca linhas de lugar
d5x .. apaga os pr´oximos 5 caracteres
dd .. apaga a linha atual
5dd .. apaga 5 linhas (tamb´em pode ser: d5d)
d5G .. apaga at´e a linha 5
dw .. apaga uma palavra
5dw .. apaga 5 palavras (tamb´em pode ser: d5w)
dl .. apaga uma letra (sin^onimo: x)
5dl .. apaga 5 letras (tamb´em pode ser: d5l ou 5x)
d0 .. apaga at´e o in´ıcio da linha
d^ .. apaga at´e o primeiro caractere da linha
d$ .. apaga at´e o final da linha (sin^onimo: D)
dgg .. apaga at´e o in´ıcio do arquivo
dG .. apaga at´e o final do arquivo
D .... apaga o resto da linha
d% ... deleta at´e o pr´oximo (,[,{
da .. deleta aspas com conte´udo
Depois do texto ter sido colocado na mem´oria, digite ‘p’ para ‘inserir’ o texto
em uma outra posi¸c˜ao. Outros comandos:
20. 10 Editando
diw .. apaga palavra mesmo que n~ao esteja posicionado no
in´ıcio
dip .. apaga o par´agrafo atual
d4b .. apaga as quatro palavras anteriores
dfx .. apaga at´e o pr´oximo ‘‘x’’
d/casa/+1 - deleta at´e a linha ap´os a palavra casa
Trocando a letra ‘d’ nos comandos acima por ‘c’ de change “mudan¸ca” ao inv´es
de deletar ser´a feita uma mudan¸ca de conte´udo. Por exemplo:
:h change
ciw .............. modifica uma palavra
cip .............. modifica um par´agrafo
cis .............. modifica uma senten¸ca
C ................ modifica at´e o final da linha
2.3.2 Copiando sem deletar
:h yank
O comando ‘y’ (yank) permite copiar uma parte do texto para a mem´oria sem
deletar. Existe uma semelhan¸ca muito grande entre os comandos ‘y’ e os coman-
dos ‘d’, um ativa a ‘c´opia’ e outro a ‘exclus˜ao’ de conte´udo, suportando ambos
quantificadores:
yy .... copia a linha atual (sin^onimo: Y)
5yy .... copia 5 linhas (tamb´em pode ser: y5y ou 5Y)
y/pat .. copia at´e ‘pat’
yw .... copia uma palavra
5yw .... copia 5 palavras (tamb´em pode ser: y5w)
yl .... copia uma letra
5yl .... copia 5 letras (tamb´em pode ser: y5l)
y^ .... copia da posi¸c~ao atual at´e o in´ıcio da linha
(sin^onimo: y0)
y$ .... copia da posi¸c~ao atual at´e o final da linha
ygg .... copia da posi¸c~ao atual at´e o in´ıcio do arquivo
yG .... copia da posi¸c~ao atual at´e o final do arquivo
Digite ‘P’ (p mai´usculo) para colar o texto rec´em copiado na posi¸c˜ao onde
encontra-se o cursor, ou ‘p’ para colar o texto na posi¸c˜ao imediatamente ap´os o
cursor.
yi .... copia trecho entre aspas (atual - inner)
vip .... sele¸c~ao visual para par´agrafo atual
‘inner paragraph’
yip .... copia o par´agrafo atual
yit .... copia a tag agual ‘inner tag’ ´util para arquivos
HTML, XML, etc.
21. 2.4 For¸cando a edi¸c˜ao de um novo arquivo 11
2.3.3 Usando a ´area de transferˆencia Clipboard
:h paste, clipboard, quoteplus
Exemplos para o modo visual:
Ctrl-insert .... copia ´area selecionada
Shift-insert ... cola o que est´a no clipboard
Ctrl-del ....... recorta para o clipboard
Caso obtenhamos erro ao colar textos da ´area de transferˆencia usando os co-
mandos acima citados podemos usar outra alternativa. Os comandos abaixo
preservam a indenta¸c˜ao1
.
+p ............ cola preservando indenta¸c~ao
+y ............ copia ´area selecionada
Para evitar erros ao colar usando Shift-insert use este comando ‘:set
paste’.
2.3.4 Removendo linhas duplicadas
:sort u
2.4 For¸cando a edi¸c˜ao de um novo arquivo
:h edit!
O Vim, como qualquer outro editor, ´e muito exigente no que se refere a altera¸c˜oes
de arquivo. Ao tentar abandonar um arquivo editado e n˜ao salvo, o Vim ir´a se
certificar da a¸c˜ao. Para abrir um novo arquivo sem salvar o antigo:
:enew!
O comando acima ´e uma abrevia¸c˜ao de edit new. De modo similar pode-se
ignorar todas as altera¸c˜oes feitas desde a abertura do arquivo:
:e!
1Espa¸camento entre o come¸co da linha e o in´ıcio do texto
22. 12 Editando
2.5 Ordenando
:h sort
O Vim, vers˜ao 7 ou superior, passa a ter um comando de ordena¸c˜ao que tamb´em
permite a retirada de linhas duplicadas, tal como foi apresentado.
:sort u ... ordena e retira linhas duplicadas
:sort n ... ordena numericamente
Obs: a ordena¸c˜ao num´erica ´e diferente da ordena¸c˜ao alfab´etica se em um trecho
contendo algo como:
8
9
10
11
12
Vocˆe tentar fazer:
:sort
O Vim colocar´a nas trˆes primeiras linhas
10
11
12
Portanto lembre-se que se a ordena¸c˜ao envolver n´umeros use:
:sort n
Vocˆe pode fazer a ordena¸c˜ao em um intervalo assim:
:1,15 sort n
O comando acima diz “Ordene numericamente da linha 1 at´e a linha 15”. Po-
demos ainda ordenar `a partir de uma coluna:
:sort /.*%8v/ ..... ordena `a partir do 8o
caractere
23. 2.6 Usando o grep interno do Vim 13
2.6 Usando o grep interno do Vim
:h vimgrep, lvimgrep
Para editar todos os arquivos que contenham a palavra “inusitada”:
:vimgrep /cinusitada/ *
a op¸c˜ao ‘c’ torna a busca indiferente a letras mai´usculas e min´usculas.
Obs: o Vim busca `a partir do diret´orio atual, para se descobrir o diret´orio atual
ou mud´a-lo:
:pwd ........... exibe o diret´orio atual
:cd /diret´orio muda de diret´orio
2.7 Lista de altera¸c˜oes
:h changelist, changes
O Vim mant´em uma lista de altera¸c˜oes, veremos agora como usar este recurso.
g, ................. avan¸ca na lista de altera¸c~oes
g; ................. recua na lista de altera¸c~oes
:changes ........... visualiza a lista de altera¸c~oes
2.8 Substituindo tabula¸c˜oes por espa¸cos
:h expandtab, retab
Se houver necessidade2
de trocar tabula¸c˜oes por espa¸cos fazemos assim:
:set expandtab
:retab
Para fazer o contr´ario usamos algo como:
:%s/s{4,}/pressiona-se ctrl-i/g
onde
Ctrl-i...... insere uma tabula¸c~ao
Explicando:
2Em c´odigos Python por exemplo n˜ao se pode misturar espa¸cos e tabula¸c˜oes
24. 14 Editando
: ............ comando
% ............ em todo arquivo
s ............ substitua
/ ............ padr~ao de busca
s ........... localiza espa¸co
{4,} ........ quatro vezes
/ ............ inicio da substitui¸c~ao
Ctrl-i ..... pressione Ctrl-i para inserir Tab
/ ............ fim da substitui¸c~ao
g ............ global
2.9 Convertendo para mai´usculas
:h case
gUU ....... converte a linha para mai´usculo
guu ....... converte a linha para min´usculo
gUiw ...... converte a palavra atual para mai´usculo
~ ......... altera o case do caractere atual
2.10 Editando em modo de comando
:h put, move, global, holy-grail
Para mover um trecho usando o modo de comandos fa¸ca:
:10,20m $
O comando acima move ‘m’ da linha 10 at´e a linha 20 para o final $.
:g /palavra/ m 0
Move as linhas contendo ‘palavra’ para o come¸co (linha zero)
:10,20y a
Copia da linha ‘10’ at´e a linha ‘20’ para o registro ‘a’
:56pu a
Cola o registro ‘a’ na linha 56
:g/padr~ao/d
O comando acima deleta todas as linhas contendo a palavra ‘padr˜ao’.
Podemos inverter a l´ogica do comando global g:
25. 2.11 O arquivo alternativo 15
:g!/padr~ao/d
N˜ao delete as linhas contendo padr˜ao, ou seja, delete tudo menos as linhas
contendo a palavra ‘padr˜ao’.
:v/padr~ao/d ........ apaga linhas que n~ao contenham padr~ao
:v/S/d ............ apaga linhas vazias
S ................. significa string
A op¸c˜ao acima equivale a “:g!/padr~ao/d”. Para ler mais sobre o comando
“global” utilizado nesta se¸c˜ao veja o cap´ıtulo 6.13.
:7,10copy $
Da linha 7 at´e a linha 10 copie para o final. Veja mais sobre edi¸c˜ao no modo
de comando na se¸c˜ao “6 Buscas e substitui¸c˜oes na p´agina 42”.
Gerando sequˆencias
Para inserir uma sequˆencia de 1 a 10 `a partir da linha inicial “zero” fazemos:
:0put =range(1,10)
Caso queira inserir sequˆencias como esta:
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
Usamos este comando:
:for i in range(1,5) | .put =’192.168.0.’.i | endfor
2.11 O arquivo alternativo
:h Ctrl-6, alternate-file
´E muito comum um usu´ario concluir a edi¸c˜ao em um arquivo no Vim e ino-
centemente imaginar que n˜ao vai mais modificar qualquer coisa nele, ent˜ao este
usu´ario abre um novo arquivo:
:e novo-arquivo.txt
Mas de repente o usu´ario lembra que seria necess´ario adicionar uma linha no
arquivo rec´em editado, neste caso usa-se o atalho
26. 16 Editando
Ctrl-6
cuja fun¸c˜ao ´e alternar entre o arquivo atual e o ´ultimo editado. Para retornar
ao outro arquivo basta portanto pressionar Ctrl-6 novamente. Pode-se abrir o
arquivo alternativo em nova janela usando-se o atalho:
Ctrl-w Ctrl-6
Mais informa¸c˜oes sobre “janelas” leia a se¸c˜ao 7 na p´agina 57.
2.12 Lendo um arquivo para a linha atual
:h :r[ead]
Se desejamos inserir na linha atual um arquivo qualquer fazemos:
:r /caminho/para/arquivo.txt .. insere o arquivo na linha atual
:0r arquivo ................... insere o arquivo na primeira
linha
2.13 Incrementando n´umeros em modo normal
:h Ctrl-a, Ctrl-x
Posicione o cursor sobre um n´umero e pressione
Ctrl-a ..... incrementa o n´umero
Ctrl-x ..... decrementa o n´umero
2.14 Repetindo a digita¸c˜ao de linhas
atalhos para o modo insert
Ctrl-y ......... repete linha acima
Ctrl-e ......... repete linha abaixo
Ctrl-x Ctrl-l .. repete linhas inteiras
Ctrl-a ......... repete a ´ultima inser¸c~ao
Para saber mais sobre repeti¸c˜ao de comandos veja o cap´ıtulo 8, na p´agina
60.
2.15 Movendo um trecho de forma inusitada
:20,30m 0 ..... move da linha ‘20’ at´e ‘30’ para o come¸co
:20,/pat/m 5 .. move da linha ‘20’ at´e ‘pat’ para a linha 5
:m-5 .......... move a linha atual 5 posi¸c~oes acima
:m0 ........... move a linha atual para o come¸co
:m$ ........... move para o final do documento
27. 2.16 Uma calculadora diferente 17
2.16 Uma calculadora diferente
Sempre que for necess´ario digitar o resultado de uma express˜ao matem´atica
(portanto no modo de inser¸c˜ao) pode-se usar o atalho “Ctrl-r =”, ele ativa o
registro de express˜oes, na linha de comando do Vim aparece um sinal de igual,
digita-se ent˜ao uma express˜ao matem´atica qualquer tipo “35*6” e em seguida
pressiona-se “Enter”, o Vim coloca ent˜ao o resultado da express˜ao no lugar
desejado. Portanto n˜ao precisa-se recorrer a nenhuma calculadora para fazer
c´alculos. Pode-se fazer uso do “Registro de Express˜oes” dentro de macros, ou
seja, ao gravar a¸c˜oes pode-se fazer uso deste recurso, aumentando assim sua
complexidade e poder! Para ler sobre “macros” acesse a se¸c˜ao 8.3 na 62. Para
saber mais sobre o “registro de express˜oes” leia a se¸c˜ao 5.6 na p´agina 35.
Na se¸c˜ao 9.9 “Calculadora Cient´ıfica com o vim” p´agina 69 h´a uma descri¸c˜ao
sobre como fazer c´alculos com maior precis˜ao e complexidade.
Se a inten¸c˜ao for apenas exibir um calculo na barra de comandos ´e poss´ıvel
fazer algo assim:
:echo 5.2 * 3
2.17 Desfazendo
:h undo
Se vocˆe cometer um erro, n˜ao se preocupe! Use o comando ‘u’:
u ............ desfazer
U ............ desfaz mudan¸cas na ´ultima linha editada
Ctrl-r ...... refazer
2.17.1 Undo tree
Um novo recurso muito interessante foi adicionado ao Vim“a partir da vers˜ao 7”
´e a chamada ´arvore do desfazer. Se vocˆe desfaz alguma coisa, fez uma altera¸c˜ao
um novo branch ou galho, deriva¸c˜ao de altera¸c˜ao ´e criado. Basicamente, os
branches nos permitem acessar quaisquer altera¸c˜oes ocorridas no arquivo.
Um exemplo did´atico
Siga estes passos (para cada passo Esc, ou seja, saia do modo de inser¸c˜ao)
Passo 1 - digite na linha 1 o seguinte texto
# controle de fluxo Esc
Passo 2 - digite na linha 2 o seguinte texto
28. 18 Editando
# um la¸co for Esc
Passo 3 - Nas linhas 3 e 4 digite...
for i in range(10):
print i Esc
Passo 4 - pressione ‘u’ duas vezes (vocˆe voltar´a ao passo 1)
Passo 5 - Na linha 2 digite
# operador tern´ario Esc
Passo 6 - na linha 3 digite
var = (1 if teste == 0 else 2) Esc
Obs: A necessidade do Esc ´e para demarcar as a¸c˜oes, pois o Vim considera
cada inser¸c˜ao uma a¸c˜ao. Agora usando o atalho de desfazer tradicional “u” e de
refazer Ctrl-r observe que n˜ao ´e mais poss´ıvel acessar todas as altera¸c˜oes efetu-
adas. Em resumo, se vocˆe fizer uma nova altera¸c˜ao ap´os um desfazer (altera¸c˜ao
derivada) o comando refazer n˜ao mais vai ser poss´ıvel para aquele momento.
Agora volte at´e a altera¸c˜ao 1 e use seguidas vezes:
g+
e/ou
g-
Dessa forma vocˆe acessar´a todas as altera¸c˜oes ocorridas no texto.
2.17.2 M´aquina do tempo
O Vim possui muitas formas para desfazer e refazer, e uma das mais interessantes
´e a m´aquina do tempo! A m´aquina do tempo ´e extremamente ´util quando no
meio de um texto se percebe que boa parte do que foi adicionado ´e in´util e
que nos ultimos 10 minutos n˜ao h´a nada que se possa aproveitar. Utilizando a
m´aquina do tempo ´e poss´ıvel eliminar os ´ultimos 10 minutos de texto in´util do
seu documento facilmente, utilizando:
:earlier 10m
Com esse comando o documento ficar´a exatamente como ele estava 10 minutos
atr´as! Caso ap´os a exclus˜ao perceba-se que foi exclu´ıdo um minuto a mais, ´e
poss´ıvel utilizar o mesmo padr˜ao novamente para avan¸car no tempo:
29. 2.18 Salvando 19
:later 60s
Note que dessa vez foi utilizado later ao inv´es de earlier, e passando segundos
como argumento para viajar no tempo. Portanto o comando acima avan¸ca 60
segundos no tempo.
Para uma melhor vis˜ao de quanto se deve voltar, pode ser usado o comando:
:undolist
O comando acima mostra a lista com as informa¸c˜oes sobre Desfazer e Refazer.
E com essas informa¸c˜oes pode-se voltar no tempo seguindo cada modifica¸c˜ao:
:undo 3
Esse comando far´a o documento regredir 3 modifica¸c˜oes.
2.18 Salvando
:h writing
A maneira mais simples de salvar um arquivo, ´e usar o comando:
:w
Para especificar um novo nome para o arquivo, simplesmente digite:
:w! ‘‘file’’
O conte´udo ser´a gravado no arquivo“file”e vocˆe continuar´a no arquivo original.
Tamb´em existe o comando
:sav[eas] nome
salva o arquivo com um novo nome e muda para esse novo arquivo (o arquivo
original n˜ao ´e apagado). Para sair do editor, salvando o arquivo atual, digite :x
(ou :wq).
:w ............................ salva
:wq .......................... salva e sai
:w nome ....................... salvar como
:saveas nome .................. salvar como
:sav nome ..................... mesmo que saveas nome
:x ............................ salva se existirem
modifica¸c~oes
:10,20 w! ~/Desktop/teste.txt . salva um trecho para outro
arquivo
:w! ........................... salvamento for¸cado
:e! ........................... reinicia a edi¸c~ao ignorando
altera¸c~oes
30. 20 Editando
2.19 Abrindo o ´ultimo arquivo rapidamente
O Vim guarda um registro para cada arquivo editado veja mais no cap´ıtulo 5
na p´agina 33.
’0 ........ abre o ´ultimo arquivo editado
’1 ........ abre o pen´ultimo arquivo editado
Ctrl-6 .... abre o arquivo alternativo (booleano)
Bom, j´a que abrimos o nosso ´ultimo arquivo editado com o comando
‘0
podemos, e provavelmente o faremos, editar no mesmo ponto em que est´avamos
editando da ´ultima vez:
gi
Pode-se criar um ‘alias’3
para que ao abrir o vim o mesmo abra o ´ultimo ar-
quivo editado: ‘alias lvim=vim -c normal ’0’. No cap´ıtulo 6 p´agina
42 vocˆe encontra mais dicas de edi¸c˜ao.
2.20 Modelines
:h modeline
S˜ao um modo de guardar preferˆencias no pr´oprio arquivo, suas preferˆencias
viajam literalmente junto com o arquivo, basta usar em uma das 5 primeiras
linhas ou na ´ultima linha do arquivo algo como:
# vim:ft=sh:
OBS: Vocˆe deve colocar um espa¸co entre a palavra ‘vim’ e a primeira coluna,
ou seja, a palavra ‘vim’ deve vir precedida de um espa¸co, da´ı em diante cada
op¸c˜ao fica assim:
:op¸c~ao:
Por exemplo: posso salvar um arquivo com extens˜ao .sh e dentro do mesmo
indicar no modeline algo como:
# vim:ft=txt:nu:
Apesar de usar a extens˜ao ‘sh’ o Vim reconhecer´a este arquivo como ‘txt’, e
caso eu n˜ao tenha habilitado a numera¸c˜ao, ainda assim o Vim usar´a por causa
da op¸c˜ao ‘nu’. Portanto o uso de modelines pode ser um grande recurso para o
seu dia-a-dia pois vocˆe pode coloca-las dentro dos coment´arios!
3Abrevia¸c˜ao para um comando do GNU/Linux
31. 2.21 Edi¸c˜ao avan¸cada de linhas 21
2.21 Edi¸c˜ao avan¸cada de linhas
Seja o seguinte texto:
1 este ´e um texto novo
2 este ´e um texto novo
3 este ´e um texto novo
4 este ´e um texto novo
5 este ´e um texto novo
6 este ´e um texto novo
7 este ´e um texto novo
8 este ´e um texto novo
9 este ´e um texto novo
10 este ´e um texto novo
Suponha que queira-se apagar “´e um texto” da linha 5 at´e o fim (linha 10).
Isto pode ser feito assim:
:5,$ normal 0wd3w
Explicando o comando acima:
:5,$ .... indica o intervalo que ´e da linha 5 at´e o fim ‘$’
normal .. executa em modo normal
0 ....... move o cursor para o come¸co da linha
w ....... pula uma palavra
d3w ..... apaga 3 palavras ‘w’
Obs: ´E claro que um comando de substitui¸c˜ao simples
:5,$s/´e um texto//g
Resolveria neste caso, mas a vantagem do m´etodo anterior ´e que ´e v´alido para
trˆes palavras, sejam quais forem. Tamb´em ´e poss´ıvel empregar comandos de
inser¸c˜ao como ‘i’ ou ‘a’ e retornar ao modo normal, bastando para isso usar o
recurso Ctrl-v Esc, de forma a simular o acionamento da tecla Esc (sa´ıda do
modo de inser¸c˜ao). Por exemplo, suponha agora que deseja-se mudar a frase
“este ´e um texto novo” para “este n˜ao ´e um texto velho”; pode ser feito assim:
:5,$ normal 02win~ao ^[$ciwvelho
Decompondo o comando acima temos:
:5,$ .... indica o intervalo que ´e da linha 5 at´e o fim ‘$’
normal .. executa em modo normal
0 ....... move o cursor para o come¸co da linha
2w ...... pula duas palavras (vai para a palavra ´e)
32. 22 Editando
i ....... entra no modo de inser¸c~ao
n~ao .... insere a palavra n~ao seguida de espa¸co
^[ ...... sai do modo de inser¸c~ao (atrav´es de Ctrl-v seguido
de Esc)
$ ....... vai para o fim da linha
ciw ..... apaga a ´ultima palavra (novo) e entra em modo de
inser¸c~ao
velho ... insere a palavra velho no lugar de novo
A combina¸c˜ao Ctrl-v ´e utilizada para inserir caracteres de controle na sua forma
literal, prevenindo-se assim a interpreta¸c˜ao destes neste exato momento.
2.22 Comentando rapidamente um trecho
Tomando como exemplo um trecho de c´odigo como abaixo:
1 input{capitulo1}
2 input{capitulo2}
3 input{capitulo3}
4 input{capitulo4}
5 input{capitulo5}
6 input{capitulo6}
7 input{capitulo7}
8 input{capitulo8}
9 input{capitulo9}
Se desejamos comentar da linha 4 at´e a linha 9 podemos fazer:
posicionar o cursor no come¸co da linha 4
Ctrl-v ........... inicia sele¸c~ao por blocos
5j ............... estende a sele¸c~ao at´e o fim
Shift-i .......... inicia inser¸c~ao no come¸co da linha
% ................ insere coment´ario (LaTeX)
Esc .............. sai do modo de inser¸c~ao
2.23 Comparando arquivos com o vimdiff
:h diff
O vim possui um modo para checagem de diferen¸cas entre arquivos, ´e bastante
´util especialmente para programadores, para saber quais s˜ao as diferen¸cas entre
dois arquivos faz-se:
vimdiff arquivo1.txt arquivo2.txt .. exibe as diferen¸cas
]c ................................. mostra pr´oxima diferen¸ca
vim -d ............................. outro modo de abrir o
vimdiff mode
33. 2.23 Comparando arquivos com o vimdiff 23
Para usu´arios do GNU/Linux ´e poss´ıvel ainda checar diferen¸cas remotamente
assim:
vimdiff projeto scp://usuario@estacao//caminho/projeto
O comando acima ir´a exibir lado a lado o arquivo local chamado ‘projeto’ e o
arquivo remoto contido no computador de nome ‘estacao’ de mesmo nome.
34. Cap´ıtulo 3
Movendo-se no Documento
:h motion.txt
A fim de facilitar o entendimento acerca das teclas e atalhos de movimenta¸c˜ao,
faz-se ´util uma breve recapitula¸c˜ao de conceitos relacionados. Para se entrar em
modo de inser¸c˜ao, estando em modo normal, pode-se pressionar qualquer uma
das teclas abaixo:
i ..... entra no modo de inser¸c~ao antes do caractere atual
I ..... entra no modo de inser¸c~ao no come¸co da linha
a ..... entra no modo de inser¸c~ao ap´os o caractere atual
A ..... entra no modo de inser¸c~ao no final da linha
o ..... entra no modo de inser¸c~ao uma linha abaixo
O ..... entra em modo de inser¸c~ao uma linha cima
Esc . sai do modo de inser¸c~ao
Uma vez no modo de inser¸c˜ao todas as teclas s˜ao exatamente como nos outros
editores simples, caracteres que constituem o conte´udo do texto sendo digitado.
Para sair do modo de inser¸c˜ao e retornar ao modo normal digita-se Esc ou
Ctrl-[. As letras h, k, l, j funcionam como setas:
k
h l
j
ou seja, a letra ‘k’ ´e usada para subir no texto, a letra ‘j’ para descer, a letra ‘h’
para mover-se para a esquerda e a letra ‘l’ para mover-se para a direita. A ideia
´e que se consiga ir para qualquer lugar do texto sem tirar as m˜aos do teclado,
sendo portanto alternativas para as setas de movimenta¸c˜ao usuais do teclado.
Ao inv´es de manter os quatro dedos sobre H, J, K e L, ´e aconselh´avel manter
o padr˜ao de digita¸c˜ao com o indicador da m˜ao esquerda sobre a tecla F e o da
m˜ao direita sobre a letra J, sendo que seu indicador da m˜ao direita vai alternar
entre a tecla J e H para a movimenta¸c˜ao.
Para ir para linhas espec´ıficas ‘em modo normal’ digite:
35. 25
:nEnter ..... vai para linha ‘n’
ngg ............ vai para linha ‘n’
nG ............. vai para linha ‘n’
onde “n” corresponde ao n´umero da linha. Para retornar ao modo normal pres-
sione Esc ou use Ctrl-[ (^[).
No vim ´e poss´ıvel realizar diversos tipos de movimentos, tamb´em conhecidos
como saltos no documento. A lista abaixo aponta o comandos de salto t´ıpicos.
gg .... vai para o in´ıcio do arquivo
G ..... vai para o final do arquivo
0 ..... vai para o in´ıcio da linha
^ ..... vai para o primeiro caractere da linha (ignora
espa¸cos)
$ ..... vai para o final da linha
25gg .. salta para a linha 25
’’ .... salta para a linha da ´ultima posi¸c~ao em que o cursor
estava
fx .... para primeira ocorr^encia de x
tx .... Para ir para uma letra antes de x
Fx .... Para ir para ocorr^encia anterior de x
Tx .... Para ir para uma letra ap´os o ´ultimo x
* ..... Pr´oxima ocorr^encia de palavra sob o cursor
‘’ .... salta exatamente para a posi¸c~ao em que o cursor
estava
gd .... salta para declara¸c~ao de vari´avel sob o cursor
gD .... salta para declara¸c~ao (global) de vari´avel sob o
cursor
w ..... move para o in´ıcio da pr´oxima palavra
W ..... pula para pr´oxima palavra (desconsidera h´ıfens)
E ..... pula para o final da pr´oxima palavra (desconsidera
hifens)
e ..... move o cursor para o final da pr´oxima palavra
zt .... movo o cursor para o topo da p´agina
zm .... move o cursor para o meio da p´agina
zz .... move a p´agina de modo com que o cursor fique no
centro
n ..... move o cursor para a pr´oxima ocorr^encia da busca
N ..... move o cursor para a ocorr^encia anterior da busca
Tamb´em ´e poss´ıvel efetuar saltos e fazer algo mais ao mesmo tempo, a lista
abaixo aponta algumas dessas possibilidades.
gv .... repete a ´ultima sele¸c~ao visual e posiciona o cursor
neste local
% ..... localiza par^enteses correspondente
o ..... letra ‘o’, alterna extremos de sele¸c~ao visual
yG .... copia da linha atual at´e o final do arquivo
d$ .... deleta do ponto atual at´e o final da linha
36. 26 Movendo-se no Documento
gi .... entra em modo de inser¸c~ao no ponto da ´ultima edi¸c~ao
gf .... abre o arquivo sob o cursor
Para o Vim “palavras-separadas-por-h´ıfen” s˜ao consideradas em separado, por-
tanto se vocˆe usar, em modo normal “w” para avan¸car entre as palavras ele
pular´a uma de cada vez, no entanto se usar “W” em mai´usculo (como visto) ele
pular´a a “a-palavra-inteira” :)
E .... pula para o final de palavras com hifen
B .... pula palavras com hifen (retrocede)
W .... pula palavras hifenizadas (come¸co)
Podemos pular senten¸cas:
) .... pula uma senten¸ca para frente
( .... pula uma senten¸ca para tr´as
} .... pula um par´agrafo para frente
{ .... pula um par´agrafo para tr´as
y) ... copia uma senten¸ca para frente
d} ... deleta um par´agrafo para frente
Caso tenha uma estrutura como abaixo:
def pot(x):
return x**2
E tiver uma referˆencia qualquer para a fun¸c˜ao pot e desejar mover o cursor at´e
sua defini¸c˜ao basta posicionar o cursor sobre a palavra pot e pressionar (em
modo normal):
gd
Se a vari´avel for global, ou seja, estiver fora do documento (provavelmente em
outro) use:
gD
Quando definimos uma vari´avel tipo
var = ‘teste’
e em algum ponto do documento houver referˆencia a esta vari´avel e se desejar
ver seu conte´udo fazemos
[i
37. 27
Na verdade o atalho acima lhe mostrar´a o ´ultimo ponto onde foi feita a atribui¸c˜ao
`aquela vari´avel que est´a sob o cursor, uma m˜ao na roda para os programadores
de plant˜ao! Observe a barra de status do Vim se o tipo de arquivo est´a
certo, tipo. Para detalhes sobre como personalizar a barra de status na se¸c˜ao
12.10.2.
ft=python
a busca por defini¸c˜oes de fun¸c˜ao s´o funciona se o tipo de arquivo estiver correto
:set ft=python
Um mapeamento interessante que facilita a movimenta¸c˜ao at´e linahas que
contenham determinada palavra de um modo bem simples, bastando pressionar
,f pode ser feito assim:
map ,f [I:let nr = input(Which one: )Barexe normal . nr .[tCR
Uma vez definido o mapeamento acima e pressionando-se o atalho associado,
que neste caso ´e ,f o vim exibir´a as uma opp¸c˜ao para pular para as ocorrˆencias
da palavra assim:
1: trecho contendo a palavra
2: outro trecho contendo a palavra
Which one:
outro detalhe para voltar ao ´ultimo ponto em que vocˆe estava
’’
A maioria dos comandos do Vim pode ser precedida por um quantificador:
5j ..... desce 5 linhas
d5j .... deleta as pr´oximas 5 linhas
k ...... em modo normal sobe uma linha
5k ..... sobe 5 linhas
y5k .... copia 5 linhas (para cima)
w ...... pula uma palavra para frente
5w ..... pula 5 palavras
d5w .... deleta 5 palavras
b ...... retrocede uma palavra
5b ..... retrocede 5 palavras
fx ..... posiciona o cursor em ‘‘x’’
dfx .... deleta at´e o pr´oximo ‘‘x’’
dgg .... deleta da linha atual at´e o come¸co do arquivo
dG ..... deleta at´e o final do arquivo
yG ..... copia at´e o final do arquivo
yfx .... copia at´e o pr´oximo ‘‘x’’
y5j .... copia 5 linhas
38. 28 Movendo-se no Documento
3.1 Paginando
Para rolar uma p´agina de cada vez (em modo normal)
Ctrl-f
Ctrl-b
:h jumps . ajuda sobre a lista de saltos
:jumps ... exibe a lista de saltos
Ctrl-i ... salta para a posi¸c~ao mais recente
Ctrl-o ... salta para a posi¸c~ao mais antiga
’0 ....... abre o ´ultimo arquivo editado
’1 ....... abre o pen´ultimo arquivo editado
gd ....... pula para a defini¸c~ao de uma vari´avel
} ........ pula para o fim do par´agrafo
10| ...... pula para a coluna 10
[i ....... pula para defini¸c~ao de vari´avel sob o cursor
Observa¸c˜ao: lembre-se
^ .... equivale a Ctrl
^I ... equivale a Ctrl-I
´E poss´ıvel abrir v´arios arquivos tipo vim *.txt. Editar algum arquivo, salvar
e ir para o pr´oximo arquivo com o comando `a seguir:
:wn
Ou voltar ao arquivo anterior
:wp
´E poss´ıvel ainda “rebobinar” sua lista de arquivos.
:rew[wind]
Ir para o primeiro
:fir[st]
Ou para o ´ultimo
:la[st]
39. 3.2 Usando marcas 29
3.2 Usando marcas
:h mark-motions
As marcas s˜ao um meio eficiente de se pular para um local no arquivo. Para
criar uma, estando em modo normal faz-se:
ma
Onde ‘m’ indica a cria¸c˜ao de uma marca e ‘a’ ´e o nome da marca. Para pular
para a marca ‘a’:
‘a
Para voltar ao ponto do ´ultimo salto:
’’
Para deletar de at´e a marca ‘a’ (em modo normal):
d’a
3.2.1 Marcas globais
Durante a edi¸c˜ao de v´arios arquivos pode-se definir uma marca global com o
comando:
mA
Onde ‘m’ cria a marca e ‘A’ (mai´usculo) define uma marca ‘A’ acess´ıvel a qualquer
momento com o comando:
’A
Isto far´a o Vim dar um salto at´e a marca ‘A’ mesmo que esteja em outro arquivo,
mesmo que vocˆe tenha acabado de fecha-lo. Para abrir e editar v´arios arquivos
do Vim fazemos:
vim *.txt ......... abre todos os arquivos ‘txt’
:bn ............... vai para o pr´oximo da lista
:bp ............... volta para o arquivo anterior
:ls ............... lista todos os arquivos abertos
:wn ............... salva e vai para o pr´oximo
:wp ............... salva e vai para o pr´evio
40. Cap´ıtulo 4
Folders
Folders s˜ao como dobras nas quais o Vim esconde partes do texto, algo assim:
+-- 10 linhas ---------------------------
Deste ponto em diante chamaremos os folders descritos no manual do Vim como
dobras! Quando tiver que manipular grandes quantidades de texto tente usar
dobras, isto permite uma visualiza¸c˜ao completa do texto. Um modo de entender
rapidamente como funcionam as dobras no Vim seria criando uma “dobra” para
as pr´oximas 10 (dez) linhas com o comando abaixo:
zf10j
Vocˆe pode ainda criar uma sele¸c˜ao visual
Shift-v ............ sele¸c~ao por linha
j .................. desce linha
zf ................. cria o folder
zo ................. abre o folder
4.1 M´etodos de dobras
O Vim tem seis modos fold, s˜ao eles:
• Sintaxe (syntax)
• Identa¸c˜ao (indent)
• Marcas (marker)
• Manual (manual)
• Diferen¸cas (diff)
• Express˜oes Regulares (expr)
41. 4.2 Manipulando dobras 31
Para determinar o tipo de dobra fa¸ca
:set foldmethod=tipo
onde o tipo pode ser um dos tipos listados acima, exemplo:
:set foldmethod=marker
Outro modo para determinar o m´etodo de dobra seria colocando na ´ultima linha
do seu arquivo algo assim:
vim:fdm=marker:fdl=0:
Obs: fdm significa foldmethod, e fdl significa foldlevel. Deve haver um espa¸co
entre a palavra inicial“vim”e o come¸co da linha este recurso chama-se modeline,
leia mais na se¸c˜ao “2.20 modelines” na p´agina 20.
4.2 Manipulando dobras
Os principais comandos relativos ao uso de dobras s˜ao:
zo ................ abre a dobra
zO ................ abre a dobra, recursivamente
za ................ abre/fecha (alterna) a dobra
zA ................ abre/fecha (alterna) a dobra,
recursivamente
zR ................ abre todas as dobras do arquivo atual
zM ................ fecha todas as dobras do arquivo atual
zc ................ fecha uma dobra
zC ................ fecha a dobra abaixo do cursor,
recursivamente
zfap .............. cria uma dobra para o par´agrafo ‘ap’
atual
zf/casa ........... cria uma dobra at´e a palavra casa
zf’a .............. cria uma dobra at´e a marca ‘a’
zd ................ apaga a dobra (n~ao o seu conte´udo)
zj ................ move para o in´ıcio da pr´oxima dobra
zk ................ move para o final da dobra anterior
[z ................ move o cursor para in´ıcio da dobra
aberta
]z ................ move o cursor para o fim da dobra aberta
zi ................ desabilita ou habilita as dobras
zm, zr ............ diminui/aumenta n´ıvel da dobra ‘fdl’
:set fdl=0 ........ n´ıvel da dobra 0 (foldlevel)
:set foldcolumn=4 . mostra uma coluna ao lado da numera¸c~ao
Para abrir e fechar as dobras usando a barra de espa¸cos coloque o trecho abaixo
no seu arquivo de configura¸c˜ao do Vim (.vimrc) - veja o cap´ıtulo 12, p´agina 79.
42. 32 Folders
nnoremap space @=((foldclosed(line(.)) 0) ?
’zc’ : ’zo’)CR
A barra, , nesse comando representa o particionamento do comando em mais
de uma linha.
Para abrir e fechar as dobras utilizando o clique do mouse no gvim, basta acres-
centar na configura¸c˜ao do seu .vimrc:
set foldcolumn=2
o que adiciona uma coluna ao lado da coluna de enumera¸c˜ao das linhas.
4.3 Criando dobras usando o modo visual
Para iniciar a sele¸c˜ao visual
Esc ........ vai para o modo normal
shift-v .... inicia sele¸c~ao visual
j .......... aumenta a sele¸c~ao visual (desce)
zf ......... cria a dobra na sele¸c~ao ativa
Um modo inusitado de se criar dobras ´e:
Shift-v ..... inicia sele¸c~ao visual
/chapter/-2 . extende a sele¸c~ao at´e /chapter -2 linhas
zf .......... cria a dobra
43. Cap´ıtulo 5
Registros
O Vim possui nove tipos de registros, cada tipo tem uma utilidade espec´ıfica, por
exemplo vocˆe pode usar um registro que guarda o ´ultimo comando digitado, pode
ainda imprimir dentro do texto o nome do pr´oprio arquivo, armazenar por¸c˜oes
distintas de texto (´area de transferˆencia m´ultipla) etc. Vamos aos detalhes.
• O registro sem nome “”
• 10 registros nomeados de “9”
• O registro de pequenas dele¸c˜oes -
• 26 registros nomeados de “z” ou de “Z”
• 4 registros somente leitura
• O registro de express˜oes ”=
• Os registro de sele¸c˜ao e ”*, ”+ and ”
• O registro “o”
• Registro do ´ultimo padr˜ao de busca ”/
5.1 O registro sem nome “”
Armazena o conte´udo de a¸c˜oes como:
d ....... dele¸c~ao
s ....... substitui¸c~ao
c ....... modifica¸c~ao ‘change’
x ....... apaga um caractere
yy ...... copia uma linha inteira
Para acessar o conte´udo deste registro basta usar as letras “p” ou “P” que na
verdade s˜ao comandos para colar abaixo da linha atual e acima da linha atual
(em modo normal).
44. 34 Registros
5.2 Registros nomeados de 0 a 9
:h registers
O registro zero armazena o conte´udo da ´ultima c´opia ‘yy’, `a partir do registro
1 v˜ao sendo armazenadas as dele¸c˜oes sucessivas de modo que a mais recente
dele¸c˜ao ser´a armazenada no registro 1 e os registros v˜ao sendo incrementados
em dire¸c˜ao ao nono. Dele¸c˜ao menores que uma linha n˜ao s˜ao armazenadas
nestes registros, caso em que o Vim usa o registro de pequenas dele¸c˜oes ou que
se tenha especificado algum outro registro.
5.3 Registro de pequenas dele¸c˜oes -
Quando se deleta algo menor que uma linha o Vim armazena os dados deletados
neste registro.
5.4 Registros nomeados de “a at´e z” ou “A at´e
Z”
Pode-se armazenar uma linha em modo normal assim:
ayy
Desse modo o Vim guarda o conte´udo da linha no registro ‘a’ caso queira arma-
zenar mais uma linha no registro ‘a’ use este comando:
Add
Neste caso a linha corrente ´e apagada ‘dd’ e adicionada ao final do registro “a”.
ayip .. copia o par´agrafo atual para o registro ‘‘a’’
a ..... registro a
y ...... yank (copia)
ip ..... inner paragraph (este par´agrafo)
5.5 Registros somente leitura “: . % #”
: ..... armazena o ´ultimo comando
. ..... armazena uma c´opia do ´ultimo texto inserido
% ..... cont´em o nome do arquivo corrente
# ..... cont´em o nome do arquivo alternativo
Uma forma pr´atica de usar registros em modo de inser¸c˜ao ´e usando: Ctrl-r
45. 5.6 Registro de express˜oes ”= 35
Ctrl-r % .... insere o nome do arquivo atual
Ctrl-r : .... insere o ´ultimo comando digitado
Ctrl-r / .... insere a ´ultima busca efetuada
Ctrl-r a .... insere o registro ‘a’
Em modo de inser¸c˜ao pode-se repetir a ´ultima inser¸c˜ao de texto simplesmente
pressionando:
Ctrl-a
5.6 Registro de express˜oes ”=
=
O registro de express˜oes permite efetuar c´alculos diretamente no editor, usando o
atalho“Ctrl-r =”no modo de inser¸c˜ao, o editor mostrar´a um sinal de igualdade
na barra de status e o usu´ario digita ent˜ao uma express˜ao matem´atica como uma
multiplica¸c˜ao “6*9” e em seguida pressiona Enter para que o editor finalize a
opera¸c˜ao. Veja um v´ıdeo demonstrando sua utiliza¸c˜ao neste link [2].
Para entender melhor como funciona o registro de express˜oes tomemos um exem-
plo. Para fazer uma sequˆencia como abaixo:
linha 1 tem o valor 150,
linha 2 tem o valor 300,
linha 3 tem o valor 450,
...
Acompanhe os passos para a cria¸c˜ao de uma macro permite fazer uma sequˆencia
de quantas linhas forem necess´arias com o incremento proposto acima.
Esc ......... sai do modo de inser¸c~ao
qa ............. inicia a macro
yy ............. copia a primeira linha
p .............. cola a linha copiada
w .............. pula para o n´umero ‘1’
Ctrl-a ....... incrementa o n´umero (agora 2)
4w ............. avan¸ca 4 palavras at´e 150
ndw ........... apaga o ‘150’ para o registro n
a .............. entra em modo de inser¸c~ao
Ctrl-r = ....... abre o registro de express~oes
Ctrl-r n + 150 insere dentro do registro de express~oes
o registro n
Enter ........ executa o registro de express~oes
Esc ........... sai do modo de inser¸c~ao
0 ............... vai para o come¸co da linha
q ............... para a grava¸c~ao da macro
46. 36 Registros
Agora posicione o cursor no come¸co da linha e pressione “10@a”.
Na se¸c˜ao 12.8.6 p´agina 86 h´a mais dicas sobre o uso do registro de express˜oes
c´alculos matem´aticos.
5.7 Registros de arrastar e mover
O registro
*
´e respons´avel por armazenar o ´ultimo texto selecionado (p.e., atrav´es do mouse).
J´a o registro
+
´e o denominado“´area de transferˆencia”, normalmente utilizado para se transferir
conte´udos entre aplica¸c˜oes—este registro ´e preenchido, por exemplo, usando-se
a t´ıpica combina¸c˜ao Ctrl-v encontrada em muitas aplica¸c˜oes. Finalmente, o
registro
~
armazena o texto colado pela opera¸c˜ao mais recente de“arrastar-e-soltar”(drag-
and-drop).
5.8 Registro buraco negro ”
Use este registro quando n˜ao quiser alterar os demais registros, por exemplo: se
vocˆe deletar a linha atual,
dd
Esta a¸c˜ao ir´a colocar a linha atual no registro numerado 1, caso n˜ao queira
alterar o conte´udo do registro 1 apague para o buraco negro assim:
_dd
5.9 Registros de buscas “/”
Se desejar inserir em uma substitui¸c˜ao uma busca pr´evia, vocˆe poderia fazer
assim em modo de comandos:
:%s,Ctrl-r/,novo-texto,g
47. 5.10 Manipulando registros 37
Observa¸c˜ao: veja que estou trocando o delimitador da busca para deixar claro
o uso do registro de buscas “/”. Pode-se usar um registro nomeado de ‘a-z’
assim:
let @a=new
:%s/old/=@a/g ...... substitui ’old’ por new
=@a ................ faz refer^encia ao registro ‘a’
5.10 Manipulando registros
:let @a=@_ ... limpa o registro a
:let @a=‘‘’’ ... limpa o registro a
:let @a=@ ... salva registro sem nome *N*
:let @*=@a ... copia o registro para o buffer de colagem
:let @*=@: ... copia o ultimo comando para o buffer de
colagem
:let @*=@/ ... copia a ´ultima busca para o buffer de
colagem
:let @*=@% ... copia o nome do arquivo para o buffer de
colagem
:reg ... mostra o conte´udo de todos os registros
Em modo de inser¸c˜ao
C-R- ....... Insere o registro de pequenas dele¸c~oes
C-R[0-9a-z] .. Insere registros 0-9 e a-z
C-R% .. Insere o nome do arquivo
C-R=somevar .. Insere o conte´udo de uma vari´avel
C-RC-A ..... Insere ‘Big-Words’ veja se¸c~ao 2.1
Um exemplo: pr´e-carregando o nome do arquivo no registro n.
coloque em seu ~/.vimrc
let @n=@%
Como foi atribu´ıdo ao registro n o conte´udo de @%, ou seja, o nome do arquivo,
vocˆe pode fazer algo assim em modo de inser¸c˜ao:
Ctrl-r n
E o nome do arquivo ser´a inserido
5.11 Listando os registros atuais
Digitando o comando
48. 38 Registros
:reg
ou ainda
:ls
O Vim mostrar´a os registros numerados e nomeados atualmente em uso
5.12 Listando arquivos abertos
Suponha que vocˆe abriu v´arios arquivos txt assim:
vim *.txt
Para listar os arquivos aberto fa¸ca:
:buffers
Usando o comando acima o Vim exibir´a a lista de todos os arquivos abertos,
ap´os exibir a lista vocˆe pode escolher um dos arquivos da lista, algo como:
:buf 3
Para editar arquivos em sequˆencia fa¸ca as altera¸c˜oes no arquivo atual e acesso
o pr´oximo assim:
:wn
O comando acima diz → ‘w gravar’ → ‘n pr´oximo’
5.13 Dividindo a janela com o pr´oximo arquivo
da lista de buffers
:sn
O comando acima ´e uma abrevia¸c˜ao de split next, ou seja, dividir e pr´oximo.
5.14 Como colocar um peda¸co de texto em um
registro?
Esc ...... vai para o modo normal
a10j ...... coloca no registro ‘a’ as pr´oximas 10 linhas
‘10j’
49. 5.15 Como criar um registro em modo visual? 39
Pode-se fazer:
Esc ...... para ter certeza que est´a em modo normal
ap ........ registro a ‘paste’, ou seja, cole
Em modo de inser¸c˜ao faz-se:
Ctrl-r a
H´a situa¸c˜oes em que se tem caracteres n˜ao “ascii ” que s˜ao complicados de
se colocar em uma busca ou substitui¸c˜ao, nestes casos pode-se usar os seguintes
comandos:
ayl ............. copia para o registro ‘a’ o caractere sob
o cursor
:%s/c-ra/char .. subsitui o conte´udo do registro ‘a’ por
char
Pode-se ainda usar esta t´ecnica para copiar rapidamente coment´arios do“bash1
”,
representados pelo caracteres #, em modo normal usando o atalho “0yljP”.
0 ............... posiciona o cursor no in´ıcio a linha
yl .............. copia o caractere sob o cursor
j ............... desce uma linha
P ............... cola o caractere copiado
5.15 Como criar um registro em modo visual?
Inicie a sele¸c˜ao visual com o atalho
Shift-v ..... seleciona linhas inteiras
pressione a letra “j” at´e chegar ao ponto desejado, agora fa¸ca
ay
pressione “v” para sair do modo visual.
5.16 Como definir um registro no vimrc?
Se vocˆe n˜ao sabe ainda como editar preferˆencias no Vim leia antes o cap´ıtulo
12.
Vocˆe pode criar uma vari´avel no vimrc assim:
1Interpretador de comandos do GNU/Linux
50. 40 Registros
let var=foo ...... define foo para var
echo var ........... mostra o valor de var
Pode tamb´em dizer ao Vim algo como...
:let @d=strftime(c)Enter
Neste caso estou dizendo a ele que guarde na vari´avel ‘d’ at d, o valor da data
do sistema ‘strftime(c)’ ou ent˜ao cole isto no vimrc:
let @d=strftime(c)cr
A diferen¸ca entre digitar diretamente um comando e adicion´a-lo ao vimrc ´e
que uma vez no vimrc o registro em quest˜ao estar´a sempre dispon´ıvel, observe
tamb´em as sutis diferen¸cas, um Enter inserido manualmente ´e apenas uma
indica¸c˜ao de uma a¸c˜ao que vocˆe far´a pressionando a tecla especificada, j´a o
comando mapeado vira “cr”, veja ainda que no vimrc os dois pontos “:”
somem.
Pode mapear tudo isto
let @d=strftime(c)cr
imap ,d cr-rd
nmap ,d dp
As atribui¸c˜oes acima correspondem a:
1. Guarda a data na vari´avel ‘d’
2. Mapeamento para o modo de inser¸c˜ao “imap” digite ,d
3. Mapeamento para o modo normal “nmap” digite ,d
E digitar ,d normalmente
Desmistificando o strftime
d=dia m=mes Y=ano H=hora M=minuto c=data-completa
:h strftime ........ ajuda completa sobre o comando
e inserir em modo normal assim:
dp
ou usar em modo de inser¸c˜ao assim:
Ctrl-r d
51. 5.17 Como selecionar blocos verticais de texto? 41
5.17 Como selecionar blocos verticais de texto?
Ctrl-v
agora use as letras h,l,k,j como setas de dire¸c˜ao at´e finalizar podendo guardar
a sele¸c˜ao em um registro que vai de ‘a’ a ‘z’ exemplo:
ay
Em modo normal vocˆe pode fazer assim para guardar um par´agrafo inteiro em
um registro
ayip
O comando acima quer dizer
para o registro ‘a’ ...... a
copie ...................... ‘y’
o par´agrafo atual .......... ‘inner paragraph’
5.18 Referˆencias
• http://rayninfo.co.uk/vimtips.html
• http://aprendolatex.wordpress.com
• http://pt.wikibooks.org/wiki/Latex
52. Cap´ıtulo 6
Buscas e Substitui¸c˜oes
Para fazer uma busca, certifique-se de que est´a em modo normal, pressione “/”
e digite a express˜ao a ser procurada.
Para encontrar a primeira ocorrˆencia de “foo” no texto:
/foo
Para repetir a busca basta pressionar a tecla “n” e para repetir a busca em
sentido oposto “N”.
/teste/+3
Posiciona o cursor trˆes linhas ap´os a ocorrˆencia da palavra “teste”
/casa
A busca acima localiza ‘casa’ mas n˜ao ‘casamento’. Em express˜oes regulares,
e s˜ao representadas por b, que representa, por sua vez, borda de palavras.
Ou seja, ‘casa,‘, ‘casa!‘ seriam localizado, visto que sinais de pontua¸c˜ao n˜ao
fazem parte da palavra.
6.1 Usando “Express˜oes Regulares” em buscas
:h regex, pattern
/ ........... inicia uma busca (modo normal)
%x69 ....... c´odigo da letra ‘i’
/%x69 ...... localiza a letra ‘i’ - hexadecimal 069
d .......... localiza n´umeros
[3-8] ....... localiza n´umeros de 3 at´e 8
53. 6.1 Usando “Express˜oes Regulares” em buscas 43
^ ........... come¸co de linha
$ ........... final de linha
+ .......... um ou mais
/^d+$ ..... localiza somente d´ıgitos
/r$ ........ localiza linhas terminadas com ^M
/^s*$ ...... localiza linhas vazias ou contendo apenas espa¸cos
/^t+ ...... localiza linhas que iniciam com tabs
s .......... localiza espa¸cos
/s+$ ...... localiza espa¸cos no final da linha
6.1.1 Evitando escapes ao usar Express˜oes regulares
O Vim possui um modo chamado“very magic”para uso em express˜oes regulares
que evita o uso excessivo de escapes, alternativas etc. Usando apenas uma op¸c˜ao:
veja “:h /v”.
Em um trecho com d´ıgitos + texto + d´ıgitos no qual se deseja manter s´o as
letras.
12345aaa678
12345bbb678
12345aac678
Sem a op¸c˜ao “very magic” far´ıamos:
:%s/d{5}(D+)d{3}/1/
J´a com a op¸c˜ao “very magic”“v” usa-se bem menos escapes:
:%s/vd{5}(D+)d{3}/1/
explica¸c~ao do comando acima
: ......... comando
% ......... em todo arquivo
s ......... substitua
/ ......... inicia padr~ao de busca
v ........ use very magic mode
d ........ d´ıgitos
{5} ....... 5 vezes
( ........ inicia um grupo
D ........ seguido de n~ao d´ıgitos
) ........ fecha um grupo
+ ......... uma ou mais vezes
d ........ novamente d´ıgitos
{3} ....... tr^es vezes
/ ......... inicio da substitui¸c~ao
1 ........ referencia o grupo 1
54. 44 Buscas e Substitui¸c˜oes
Analisando o exemplo anterior, a linha de racioc´ınio foi a de “manter o texto
entre os d´ıgitos”, o que pode ser traduzido, em uma outra forma de racioc´ınio,
como “remover os d´ıgitos”.
:%s/d//g
explica¸c~ao do comando acima
% ......... em todo arquivo
s ......... substitua
/ ......... inicia padr~ao de busca
d ........ ao encontrar um d´ıgito
/ ......... subtituir por
vazio ..... exato, substituir por vazio
/g ........ a express~ao se torna gulosa
Por guloso - /g - se entende que ele pode e deve tentar achar mais de uma ocor-
rˆencia do padr˜ao de busca na mesma linha. Caso n˜ao seja gulosa, a express˜ao
ir´a apenas casar com a primeira ocorrˆencia em cada linha.
Classes POSIX para uso em Express˜oes Regulares
Ao fazermos substitui¸c˜oes em textos poderemos nos deparar com erros, pois [a-z]
n˜ao inclui caracteres acentuados, as classes POSIX s˜ao a solu¸c˜ao para este pro-
blema, pois adequam o sistema ao idioma local, esta ´e a m´agica implementada
por estas classes.
[:lower:] ...... letras min´usculas incluindo acentos
[:upper:] ...... letras mai´usculas incluindo acentos
[:punct:] ...... ponto, virgula, colchete, etc
Para usar estas classes fazemos:
:%s/[[:lower:]]/U/g
Explicando o comando acima:
: ....... modo de comando
% ....... em todo o arquivo atual
s ....... substitua
/ ....... inicia o padr~ao a ser buscado
[ ....... inicia um grupo
[: ...... inicia uma classe POSIX
lower ... letras min´usculas
:] ...... termina a classe POSIX
] ....... termina o grupo
/ ....... inicia substitui¸c~ao
U ...... para mai´usculo
....... correponde ao que foi buscado
55. 6.2 Destacando padr˜oes 45
Nem todas as classes POSIX conseguem pegar caracteres acentuados, portanto
deve-se habilitar o destaque colorido para buscas usando:
:set hlsearch .... destaque colorido para buscas
:set incsearch ... busca incremental
Dessa forma podemos testar nossas buscas antes de fazer uma substitui¸c˜ao.
Para aprender mais sobre Express˜oes Regulares leia:
• Guia sobre Espress˜oes Regulares [3]
• :help regex
• :help pattern
Uma forma r´apida para encontrar a pr´oxima ocorrˆencia de uma palavra sob
o cursor ´e teclar ‘*’. Para encontrar uma ocorrˆencia anterior da palavra sob
o cursor, existe o # (em ambos os casos o cursor deve estar posicionado sobre
a palavra que deseja procurar). As duas op¸c˜oes citadas localizam apenas se
a palavra corresponder totalmente ao padr˜ao sob o cursor, pode-se bucar por
trechos de palavras que fa¸cam parte de palavras maiores usando-se ‘g*’. Pode-
se ainda exibir “dentro do contexto” todas as ocorrˆencias de uma palavra sob o
cursor usando-se o seguinte atalho em modo normal:
[ Shift-i
6.2 Destacando padr˜oes
:h %
Vocˆe pode destacar linhas com mais de 30 caracteres assim:
:match ErrorMsg /%30v/ . destaca linhas maiores que 30 caracteres
:match none .............. remove o destaque
6.3 Inserindo linha antes e depois
Suponha que se queira um comando, considere “,t”, que fa¸ca com que a linha
indentada corrente passe a ter uma linha em branco antes e depois; isto pode
ser obtido pelo seguinte mapeamento:
:map ,t Esc:.s/^(s+)(.*)/r12r/gcr
Explicando:
56. 46 Buscas e Substitui¸c˜oes
: ................ entra no modo de comando
map ,t ........... mapeia ,t para a fun¸c~ao desejada
Esc ............ ao executar sai do modo de inser¸c~ao
s/isto/aquilo/g .. substitui isto por aquilo
: ................ inicia o modo de comando
. ................ na linha corrente
s ................ substitua
^ ................ come¸co de linha
s+ ............. um espa¸co ou mais (barras s~ao escapes)
.* ............... qualquer coisa depois
(grupo) ........ agrupo para referenciar com 1
1 ............... repete na substitui¸c~ao o grupo 1
r ............... insere uma quebra de linha
g ................ em todas as ocorr^encias da linha
cr ............. Enter
6.4 Obtendo informa¸c˜oes do arquivo
ga ............. mostra o c´odigo do caractere em decimal hexa e octal
^g ............. mostra o caminho e o nome do arquivo
g^g ............ mostra estat´ısticas detalhadas do arquivo
Obs: O c´odigo do caractere pode ser usado para substitui¸c˜oes, especialmente
em se tratando de caracteres de controle como tabula¸c˜oes “^I” ou final de li-
nha DOS/Windows “%x0d”. Vocˆe pode apagar os caracteres de final de linha
Dos/Windows usando uma simples substitui¸c˜ao, veja mais adiante:
:%s/%x0d//g
Uma forma mais pr´atica de substituir o terminador de linha DOS para o termi-
nador de linha Unix:
:set ff=unix
:w
Na se¸c˜ao 12 p´agina 79 h´a um c´odigo para a barra de status que faz com que a
mesma exiba o c´odigo do caractere sob o cursor na se¸c˜ao 12.10.2. O caractere
de final de linha do Windows/DOS pode ser inserido com a seguinte combina¸c˜ao
de teclas:
i ............ entra em modo de inser¸c~ao
INSERT ..... entra em modo de inser¸c~ao
Ctrl-v Ctrl-m insere o simbolo ^M (terminador de linha DOS)
57. 6.5 Trabalhando com registradores 47
6.5 Trabalhando com registradores
Pode-se guardar trechos do que foi copiado ou apagado para registros distintos
(´area de transferˆencia m´ultipla). Os registros s˜ao indicados por aspas seguido
por uma letra. Exemplos: a, b, c, etc.
Como copiar o texto para um registrador? ´E simples: basta especificar o nome
do registrador antes:
add ... apaga linha para o registrador a
bdd ... apaga linha para o registrador b
ap .... cola o conte´udo do registrador a
bp .... cola o conte´udo do registrador b
x3dd .. apaga 3 linhas para o registrador ‘‘x’’
ayy .. copia linha para o registrador ‘a’
a3yy .. copia 3 linhas para o registrador ‘a’
ayw .. copia uma palavra para o registrador ‘a’
a3yw .. copia 3 palavras para o registrador ‘a’
No “modo de inser¸c˜ao”, como visto anteriormente, pode-se usar um atalho para
colar rapidamente o conte´udo de um registrador.
Ctrl-r (registro)
Para colar o conte´udo do registrador ‘a’
Ctrl-r a
Para copiar a linha atual para a ´area de transferˆencia
+yy
Para colar da ´area de transferˆencia
+p
Para copiar o arquivo atual para a ´area de transferˆencia “clipboard”:
:%y+
6.6 Edi¸c˜oes complexas
Trocando palavras de lugar: Posiciona-se o cursor no espa¸co antes da 1a
palavra
e digita-se:
deep
58. 48 Buscas e Substitui¸c˜oes
Trocando letras de lugar:
xp .... com a letra seguinte
xh[p .. com a letra anterior
Trocando linhas de lugar:
ddp ... com a linha de baixo
ddkP .. com a linha de cima
Tornando todo o texto mai´usculo
gggUG
ggVGU
6.7 Indentando
..... Indenta a linha atual
^t ..... Indenta a linha atual em modo de inser¸c~ao
^d ..... Remove indenta¸c~ao em modo de inser¸c~ao
ip .... indenta o par´agrafo atual
6.8 Corrigindo a indenta¸c˜ao de c´odigos
Selecione o bloco de c´odigo, por exemplo
vip ..... visual ‘‘inner paragraph’’ (selecione este par´agrafo)
= ....... corrige a indenta¸c~ao do bloco de texto selecionado
ggVG= .... corrige a identa¸c~ao do arquivo inteiro
6.9 Usando o File Explorer
O Vim navega na ´arvore de diret´orios com o comando
vim .
Use o ‘j’ para descer e o ‘k’ para subir ou Enter para editar o arquivo selecio-
nado. Pressionando F1 ao abrir o FileExplorer do Vim, vocˆe encontra dicas
adicionais sobre este modo de opera¸c˜ao do Vim.
59. 6.10 Selecionando ou deletando conte´udo de tags HTML 49
6.10 Selecionando ou deletando conte´udo de tags
HTML
tag conte´udo da tag /tag
basta usar (em modo normal) as teclas
vit ............... visual ‘inner tag | esta tag’
Este recurso tamb´em funciona com parˆenteses
vi( ..... visual select
vi ..... visual select
di( ..... delete inner (, ou seja, seu conte´udo
6.11 Substitui¸c˜oes
Para fazer uma busca, certifique-se de que est´a em modo normal, em seguida
digite use o comando ‘s’, conforme ser´a explicado.
Para substituir “foo” por “bar” na linha atual:
:s/foo/bar
Para substituir “foo” por “bar” da primeira `a d´ecima linha do arquivo:
:1,10 s/foo/bar
Para substituir “foo” por “bar” da primeira `a ´ultima linha do arquivo:
:1,$ s/foo/bar
Ou simplesmente:
:% s/foo/bar
$ ... significa para o Vim final do arquivo
% ... representa o arquivo atual
O comando ‘s’ possui muitas op¸c˜oes que modificam seu comportamento.
6.12 Exemplos
Busca usando alternativas:
/end(if|while|for)
60. 50 Buscas e Substitui¸c˜oes
Buscar´a ‘if’, ‘while’ e ‘for’. Observe que ´e necess´ario ‘escapar’ os caracteres
(, | e ), caso contr´ario eles ser˜ao interpretados como caracteres comuns.
Quebra de linha
/quebrande linha
Ignorando mai´usculas e min´usculas
/cpalavra
Usando c o Vim encontrar´a “palavra”, “Palavraa” ou at´e mesmo “PALAVRA”.
Uma dica ´e colocar no seu arquivo de configura¸c˜ao “vimrc” veja o cap´ıtulo 12
na p´agina 79.
set ignorecase .. ignora mai´usculas e min´usculas na bucsca
set smartcase ... se busca contiver mai´usculas ele passa a
consider´a-las
set hlsearch .... mostra o que est´a sendo buscado em cores
set incsearch ... ativa a busca incremental
se vocˆe n˜ao sabe ainda como colocar estas preferˆencias no arquivo de confi-
gura¸c˜ao pode ativa-las em modo de comando precedendo-as com dois pontos,
assim:
:set ignorecaseEnter
Substitui¸c˜oes com confirma¸c˜ao:
:%s/word/palavra/c ..... o ‘c’ no final habilita a confirma¸c~ao
Procurando palavras repetidas
/(w*) 1
Multilinha
/Hello_s+World
Buscar´a ‘World’, separado por qualquer n´umero de espa¸cos, incluindo quebras
de linha. Buscar´a as trˆes sequˆencias:
Hello World
Hello World
Hello
World
61. 6.12 Exemplos 51
Buscar linhas de at´e 30 caracteres de comprimento
/^.{,30}$
^ ..... representa come¸co de linha
. ..... representa qualquer caractere
:%s/[^]*//g ... apaga tags HTML/XML
:%g/^$/d ......... apaga linhas vazias
:%s/^[ t]*n//g apaga linhas vazias
Remover duas ou mais linhas vazias entre par´agrafos diminuindo para uma s´o
linha vazia.
:%s/(^n{2,})/r/g
Vocˆe pode criar um mapeamento e colocar no seu /.vimrc
map ,s Esc:%s/(^n{2,})/r/gcr
No exemplo acima, ‘,s’ ´e um mapeamento para reduzir linhas em branco suces-
sivas para uma s´o
Remove n˜ao d´ıgitos (n˜ao pega n´umeros)
:%s/^D.*//g
Remove final de linha DOS/Windows ^M que tem c´odigo hexadecimal igual a
‘0d’
:%s/%x0d//g
Troca palavras de lugar usando express˜oes regulares:
:%s/(.+)s(.+)/2 1/
Modificando todas as tags HTML para min´usculo:
:%s/([^]*)/L1/g
Move linhas 10 a 12 para al´em da linha 30:
:10,12m30
62. 52 Buscas e Substitui¸c˜oes
6.13 O comando global “g”
Buscando um padr˜ao e gravando em outro arquivo:
:’a,’b g/^Error/ . w errors.txt
Apenas imprimir linhas que cont´em determinada palavra, isto ´e ´util quando
vocˆe quer ter uma vis˜ao sobre um determina aspecto do seu arquivo vejamos:
:set nu ..... habilita numera¸c~ao
:g/Error/p .. apenas mostra as linhas correspondentes
Para mostrar o as linhas correspondentes a um padr˜ao, mesmo que a nume-
ra¸c˜ao de linha n˜ao esteja habilitada use “:g/padr~ao/#”.
numerar linhas:
:let i=1 | g/^/s//=i.t/ | let i=i+1
Outro modo de inserir n´umeros de linha
:%s/^/=line(’.’).’ ’
: ............ comando
% ............ em todo o arquivo
s ............ substitui¸c~ao
/ ............ inicio da busca
^ ............ come¸co de linha
/ ............ inicio da substitui¸c~ao
=line(’.’) .. corresponde ao no
da linha atual
.’ ’ ........ concatena um espa¸co ap´os o no
Para copiar linhas come¸cadas com Error para o final do arquivo fa¸ca:
:g/^Error/ copy $
Obs: O comando ‘copy’ pode ser abreviado ‘co’ ou ainda pode-se usar ‘t’ para
mais detalhes:
:h co
Como adicionar um padr˜ao copiado com ‘yy’ ap´os um determinado padr˜ao?
:g/padrao/+put!
:g/padrao/.put=’teste’
Entre as linhas que contiverem ‘fred’ e ‘joe’ substitua:
63. 6.13 O comando global “g” 53
:g/fred/,/joe/s/isto/aquilo/gic
As op¸c˜oes ‘gic’ correspondem a global, ignore case e confirm, podendo ser omi-
tidas deixando s´o o global.
Pegar caracteres num´ericos e jogar no final do arquivo:
:g/^d+.*/m $
Inverter a ordem das linhas do arquivo:
:g/^/m0
Apagar as linhas que cont´em Line commented:
:g/Line commented/d
Apagar todas as linhas comentadas
:g/^s*#/d
Copiar determinado padr˜ao para um registro:
:g/pattern/ normal Ayy
Copiar linhas que cont´em um padr˜ao e a linha subsequente para o final:
:g/padr~ao/;+1 copy $
Deletar linhas que n˜ao contenham um padr˜ao:
:v/dicas/d ..... deleta linhas que n~ao contenham ‘dicas’
Incrementar n´umeros no come¸co da linha:
:.,20g/^d/exe normal! c-a
Sublinhar linhas come¸cadas com Chapter:
:g/^Chapter/t.|s/./-/g
: ........ comando
g ........ global
/ ........ inicio de um padr~ao
^ ........ come¸co de linha
Chapter .. palavra literal
64. 54 Buscas e Substitui¸c˜oes
/ ........ fim do par~ao
t ........ copia
. ........ linha atual
s ........ substitua
/ ........ inicio de um padr~ao
. ........ qualquer caractere
/ ........ in´ıcio da substitui¸c~ao
- ........ por tra¸co
/ ........ fim da substitui¸c~ao
g ........ em todas as ocorr^encias
6.14 Dicas
Para colocar a ´ultima busca em uma substitui¸c˜ao fa¸ca:
:%s/Ctrl-r//novo/g
A dupla barra corresponde ao ultimo padr˜ao procurado, e portanto o comando
abaixo far´a a substitui¸c˜ao da ultima busca por casinha:
:%s//casinha/g
6.15 Filtrando arquivos com o vimgrep
Por vezes sabemos que aquela anota¸c˜ao foi feita, mas no momento esquecemos
em qual arquivo est´a, no exemplo abaixo procuramos a palavra dicas `a partir
da nossa pasta pessoal pela palavra ‘dicas’ em todos os arquivos com extens˜ao
‘txt’.
~/ ............ equivale a /home/user
:lvimgrep /dicas/gj ~/**/*.txt | ls
:h lvim ....... ajuda sobre o comando
6.16 Copiar a partir de um ponto
:19;+3 co $
O Vim sempre necessita de um intervalo (inicial e final) mas se usar-mos ‘;’ ele
considera a primeira linha como segundo ponto do intervalo, e no caso acima
estamos dizendo (nas entrelinhas) linhas 19 e 19+3
De forma an´aloga pode-se usar como referˆencia um padr˜ao qualquer:
:/palavra/;+10 m 0
O comando acima diz: `a partir da linha que cont´em “palavra” incluindo as 10
pr´oximas linhas mova ‘m’ para a primeira linha ‘0’, ou seja, antes da linha 1.
65. 6.17 Dicas das lista vi-br 55
6.17 Dicas das lista vi-br
Fonte: Grupo vi-br do yahoo [4]
Problema: Essa deve ser uma pergunta comum. Suponha o seguinte conte´udo
de arquivo:
... // v´arias linhas
texto1000texto // linha i
texto1000texto // linha i+1
texto1000texto // linha i+2
texto1000texto // linha i+3
texto1000texto // linha i+4
... // v´arias linhas
Gostaria de um comando que mudasse para
... // v´arias linhas
texto1001texto // linha i
texto1002texto // linha i+1
texto1003texto // linha i+2
texto1004texto // linha i+3
texto1005texto // linha i+4
... // v´arias linhas
Ou seja, somasse 1 a cada um dos n´umeros entre os textos especificando como
range as linhas i,i+4
:10,20! awk ’BEGIN{i=1}{if (match($0, ‘‘+’’)) print ‘‘o’’
(substr($0, RSTART, RLENGTH) + i++) ‘‘o’‘‘}’’
Mas muitos sistemas n˜ao tem awk, e logo a melhor solu¸c˜ao mesmo ´e usar o Vim:
:let i=1 | 10,20 g/textod+texto/s/d+/=submatch(0)+i/ | let i=i+1
Observa¸c˜ao: 10,20 ´e o intervalo, ou seja, da linha 10 at´e a linha 20
:help /
:help :s
:help pattern
O plugin Visincr [5] Possibilita incrementos em modo visual de diversas for-
mas, um v´ıdeo demonstrativos pode ser visto neste link: http://vimeo.com/4457161
66. 56 Buscas e Substitui¸c˜oes
6.18 Jun¸c˜ao de linhas com Vim
Fonte: dicas-l da unicamp [6]
Colabora¸c˜ao: Rubens Queiroz de Almeida
Recentemente precisei combinar, em um arquivo, duas linhas consecutivas. O
arquivo original continha linhas como:
Matr´ıcula: 123456
Senha: yatVind7kned
Matr´ıcula: 123456
Senha: invanBabnit3
E assim por diante. Eu precisava converter este arquivo para algo como:
Matr´ıcula: 123456 - Senha: yatVind7kned
Matr´ıcula: 123456 - Senha: invanBabnit3
Para isto, basta executar o comando:
:g/^Matr´ıcula/s/n/ - /
Explicando:
s/isto/aquilo/g .. substitui isto por aquilo
g ................ comando global
/................. inicia padr~ao de busca
^ ................ indica come¸co de linha
Matr´ıcula ........ palavra a ser buscada
s ................ inicia substitui¸c~ao
/n/ - / ......... troca quebra de linha ‘n’, por ‘-’
6.19 Buscando em um intervalo de linhas
Para buscar entre as linhas 10 e 50 por um padr˜ao qualquer fazemos:
/padrao%10l$50l
Esta e outras boas dicas podem ser lidas no site vim-faq [7].
67. Cap´ıtulo 7
Trabalhando com Janelas
O Vim trabalha com o conceito de m´ultiplos buffers de arquivo. Cada buffer
´e um arquivo carregado para edi¸c˜ao. Um buffer pode estar vis´ıvel ou n˜ao, e
´e poss´ıvel dividir a tela em janelas, de forma a visualizar mais de um buffer
simultaneamente.
7.1 Alternando entre Buffers de arquivo
Ao abrir um documento qualquer no Vim o mesmo fica em um buffer. Caso seja
decidido que outro arquivo seja aberto na mesma janela, o documento inicial
ir´a desaparecer da janela atual cedendo lugar ao mais novo, mas permanecer´a
ativo no buffer para futuras modifica¸c˜oes.
Para saber quantos documentos est˜ao abertos no momento utiliza-se o comando
:ls ou :buffers. Esses comandos listam todos os arquivos que est˜ao referenciados
no buffer com suas respectivas ”chaves”de referencia.
Para trocar a visualiza¸c˜ao do Buffer atual pode-se usar:
:buffer# ...... Altera para o buffer anterior
:b2 ........... Altera para o buffer cujo a chave ´e 2
Para os que preferem atalhos para alternar entre os buffers, ´e poss´ıvel utilizar
‘Ctrl-6’ que tem o mesmo funcionamento do comando ‘:b#’
7.2 Modos de divis˜ao da janela
Como foi dito acima, ´e poss´ıvel visualizar mais de um buffer ao mesmo tempo,
e isso pode ser feito utilizando tab ou split.
68. 58 Trabalhando com Janelas
7.2.1 Utilizando abas tab
A partir do Vim 7 foi disponibilizada a fun¸c˜ao de abrir arquivos em abas, por-
tanto ´e poss´ıvel ter v´arios buffers abertos em abas distintas e alternar entre elas
facilmente. Os comandos para utiliza¸c˜ao das abas s˜ao:
:tabnew ........... Abre uma nova tab
:tabprevious ...... Vai para a tab anterior
:tabnext .......... Vai para a pr´oxima tab
7.2.2 Utilizando split horizontal
Enquanto os comandos referentes a tab deixam a janela inteira dispon´ıvel para
o texto e apenas cria uma pequena aba na parte superior, o comando split lite-
ramente divide a tela atual em duas para visualiza¸c˜ao simultˆanea dos “buffers”
(seja ele o mesmo ou outro diferente). Esse ´e o split padr˜ao do Vim mas pode
ser alterado facilmente colocando a linha abaixo no seu ~/.vimrc:
:set splitright .... split padr~ao para vertical
7.2.3 Utilizando split vertical
O split vertical funciona da mesma maneira que o split horizontal, sendo a
unica diferen¸ca o modo como a tela ´e dividida, pois nesse caso a tela ´e dividida
verticalmente.
7.3 Abrindo e fechando janelas
Ctrl-w-s ...... Divide a janela horizontalmente (:split)
Ctrl-w-v ...... Divide a janela verticalmente (:vsplit)
Ctrl-w-o ...... Faz a janela atual ser a ´unica (:only)
Ctrl-w-n ...... Abre nova janela (:new)
Ctrl-w-q ...... Fecha a janela atual (:quit)
Ctrl-w-c ...... Fecha a janela atual (:close)
Lembrando que o Vim considera todos os arquivos como “buffers” portanto
quando um arquivo ´e fechado, o que est´a sendo fechado ´e a visualiza¸c˜ao do
mesmo, pois ele continua aberto no “buffer”.
7.4 Salvando e saindo
´E poss´ıvel salvar todas as janelas facilmente, assim como sair tambem:
:wall ............. salva todos ‘write all’
:qall ............. fecha todos ‘quit all’
69. 7.5 Manipulando janelas 59
7.5 Manipulando janelas
Ctrl-w-w ......... Alterna entre janelas
Ctrl-w-j ......... desce uma janela ‘j’
Ctrl-w-k ......... sobe uma janela ‘k’
Ctrl-w-l ......... move para a janela da direta ‘l’
Ctrl-w-h ......... move para a janela da direta ‘h’
Ctrl-w-r ......... Rotaciona janelas na tela
Ctrl-w-+ ......... Aumenta o espa¸co da janela atual
Ctrl-w-- ......... Diminui o espa¸co da janela atual
Pode-se mapear um atalho para redimensionar janelas com as teclas ‘+’ e ‘-’.
:map + c-w+
:map - c-w-
7.6 File Explorer
:h buffers windows
Para abrir o gerenciador de arquivos do Vim use:
:Vex ............ abre o file explorer verticalmente
:Sex ............ abre o file explorer em nova janela
:Tex ............ abre o file explorer em nova aba
:e .............. abre o file explorer na janela atual
ap´os abrir chame a ajuda F1
Para abrir o arquivo sob o cursor em nova janela coloque a linha abaixo no seu
~/.vimrc
let g:netrw_altv = 1
´E poss´ıvel mapear um atalho “no caso abaixo F2” para abrir o File Explorer.
map F2 Esc:Vexcr
Ao editar um arquivo no qual h´a referˆencia a um outro arquivo, por exemplo:
‘/etc/hosts’, pode-se usar o atalho ‘Ctrl-w f’ para abri-lo em nova janela, ou
‘gf’ para abri-lo na janela atual. Mas ´e importante posicionar o cursor sobre o
nome do arquivo. Veja tamb´em mapeamentos na se¸c˜ao 12.8 p´agina 83.
70. Cap´ıtulo 8
Repeti¸c˜ao de Comandos
Para repetir a ´ultima edi¸c˜ao saia do modo de Inser¸c˜ao e pressione ponto (.):
.
Para inserir um texto que deve ser repetido v´arias vezes:
1. Posicione o cursor no local desejado;
2. Digite o n´umero de repeti¸c˜oes;
3. Entre em modo de inser¸c˜ao;
4. Digite o texto;
5. Saia do modo de inser¸c˜ao (tecle Esc).
Por exemplo, se vocˆe quiser inserir oitenta tra¸cos numa linha, em vez de digitar
um por um, vocˆe pode digitar o comando:
80i-Esc
Veja, passo a passo, o que aconteceu:
Antes de entrar em modo de inser¸c˜ao usamos um quantificador
‘80’
depois iniciamos o modo de inser¸c˜ao
i
depois digitamos o caractere a ser repetido
-
71. 8.1 Repetindo a digita¸c˜ao de uma linha 61
e por fim sa´ımos do modo de inser¸c˜ao
Esc
Se desej´assemos digitar 10 linhas com o texto
isto ´e um teste
dever´ıamos ent˜ao fazer assim:
Esc .. para ter certeza que ainda estamos no modo normal
10 ..... quantificador antes
i ...... entrar no modo de inser¸c~ao
isto ´e um teste Enter
Esc .. voltar ao modo normal
8.1 Repetindo a digita¸c˜ao de uma linha
modo de inser¸c~ao
Ctrl-y .......... repete a linha acima
Ctrl-e .......... repetira linha abaixo
Ctrl-x Ctrl-l ... repete linhas completas
O atalho Ctrl-x Ctrl-l s´o funcionar´a para uma linha semelhante, experimente
digitar:
uma linha qualquer com algum conte´udo
uma linha Ctrl-x Ctrl-l
e veja o resultado
8.2 Guardando trechos em “registros”
Os registradores ‘a-z’ s˜ao uma esp´ecie de ´area de transferˆencia m´ultipla.
Deve-se estar em modo normal e ent˜ao digitar aspas duplas e uma das 26 letras
do alfabeto, em seguida uma a¸c˜ao por exemplo, ‘y’ (copiar) ‘d’ (apagar). Depois,
mover o cursor para a linha desejada e colar com rp, onde ‘r’ corresponde ao
registrador para onde o trecho foi copiado.
ayy ... copia a linha atual para o registrador ‘a’
ap ... cola o conte´udo do registrador ‘a’ abaixo
bdd ... apaga a linha atual para o registrador ‘b’
72. 62 Repeti¸c˜ao de Comandos
8.3 Gravando comandos
Imagine que vocˆe tem o seguinte trecho de c´odigo:
stdio.h
fcntl.h
unistd.h
stdlib.h
e quer que ele fique assim:
#include stdio.h
#include fcntl.h
#include unistd.h
#include stdlib.h
N˜ao ´e poss´ıvel simplesmente executar repetidas vezes um comando do Vim, pois
´e preciso incluir texto tanto no come¸co quanto no fim da linha? ´E necess´ario
mais de um comando para isso. ´E a´ı que entram as macros. Pode-se gravar at´e
26 macros, j´a que elas s˜ao guardadas nos registros do Vim, que s˜ao identificados
pelas letras do alfabeto. Para come¸car a gravar uma macro no registro ‘a’,
digitamos
qa
No modo Normal. Tudo o que for digitado a partir de ent˜ao, ser´a gravado no
registro ‘a’ at´e que seja conclu´ıdo com o comando Escq novamente (no modo
Normal). Assim, soluciona-se o problema:
Esc ....... para garantir que estamos no modo normal
qa .......... inicia a grava¸c~ao da macro ‘a’
I ........... entra no modo de inser¸c~ao no come¸co da linha
#include .. insere #include
Esc ....... sai do modo de inser¸c~ao
A .......... insere o ´ultimo caractere
Esc ....... sai do modo de inser¸c~ao
j ........... desce uma linha
Esc ....... sai do modo de inser¸c~ao
q ........... para a grava¸c~ao da macro
Agora s´o ´e preciso posicionar o cursor na primeira letra de uma linha como esta
stdio.h
E executar a macro do registro ‘a’ quantas vezes for necess´ario, usando o co-
mando @a. Para executar quatro vezes, digite:
4@a
73. 8.4 Repetindo substitui¸c˜oes 63
Este comando executa quatro vezes o conte´udo do registro ‘a’.
Caso tenha sido executada, a macro pode ser repetida com o comando
@@
8.4 Repetindo substitui¸c˜oes
Caso seja feito uma substitui¸c˜ao em um intervalo como abaixo
:5,32s/isto/aquilo/g
Pode-se repetir esta substitui¸c˜ao em qualquer linha que estiver apenas usando
este s´ımbolo
O Vim substituir´a na linha corrente ‘isto’ por ‘aquilo’. Podendo repetir a ´ultima
substitui¸c˜ao globalmente assim:
g
8.5 Repetindo comandos
@:
O atalho acima repete o ´ultimo comando no pr´oprio modo de comandos
8.6 Scripts Vim
Usando um script para modificar um nome em v´arios arquivos: Crie um arquivo
chamado subst.vim contendo os comandos de substitui¸c˜ao e o comando de
salvamento :wq.
%s/bgcolor=eeeeee/bgcolor=ffffff/g
wq
Para executar um script, digite o comando
:source nome_do_script.vim
O comando :source tamb´em pode ser abreviado com :so bem como ser usado
para testar um esquema de cor:
:so tema.vim
74. 64 Repeti¸c˜ao de Comandos
8.7 Usando o comando bufdo
Com o comando :bufdo, pode-se executar um comando em um conjunto de
arquivos de forma r´apida. No exemplo a seguir, ser˜ao abertos todos os arquivos
HTML do diret´orio atual, ser´a efetuado uma substitui¸c˜ao e em seguida ser˜ao
todos salvos.
vim *.html
:bufdo %s/bgcolor=eeeeee/bgcolor=ffffff/ge | :wall
:qall
O comando :wall salva“write”todos“all”os arquivos abertos pelo comando vim
*.html. Opcionalmente vocˆe pode combinar “:wall” e “:qall” com o comando
:wqall, que salva todos os arquivos abertos e em seguida sai do Vim. A op¸c˜ao
‘e’ faz com que o vim n˜ao exiba mensagens de erro caso o buffer em quest˜ao n˜ao
contenha o padr˜ao a ser substitu´ıdo.
8.8 Colocando a ´ultima busca em um comando
Observa¸c˜ao: lembre-se Ctrl = ^
:^r/
8.9 Inserindo o nome do arquivo no comando
:^r%
8.10 Inserindo o ´ultimo comando
^r:
Se preceder com “:” vocˆe repete o comando, equivale a acessar o hist´orico de
comandos com as setas
:^r:
8.11 Inserindo a palavra sob o cursor em um
comando
O comando abaixo pode ser usado para pegar por exemplo, a palavra que est´a
atualmente sob o cursor, e coloca-la em um comando de busca.
^r^w
75. 8.12 Para repetir exatamente a ´ultima inser¸c˜ao 65
8.12 Para repetir exatamente a ´ultima inser¸c˜ao
ic-a
76. Cap´ıtulo 9
Comandos Externos
O Vim permite executar comandos externos para processar ou filtrar o conte´udo
de um arquivo. De forma geral, fazemos isso digitando (no modo normal):
:!ls .... visualiza o conte´udo do diret´orio
Lembrando que anexando um simples ponto, a sa´ıda do comando torna-se o
documento que est´a sendo editado:
:.!ls .... imprime na tela o conte´udo do diret´orio
A seguir, veja alguns exemplos de utiliza¸c˜ao:
9.1 Ordenando
Podemos usar o comando sort que ordena o conte´udo de um arquivo dessa forma:
:5,15!sort ..... ordena da linha 5 at´e a linha 15
O comando acima ordena da linha 5 at´e a linha 15.
O comando sort existe tanto no Windows quanto nos sistemas Unix. Digitando
simplesmente sort, sem argumentos, o comportamento padr˜ao ´e de classificar na
ordem alfab´etica (baseando-se na linha inteira). Para mais informa¸c˜oes sobre
argumentos do comando sort, digite:
sort --help ou man sort (no Unix) ou
sort /? (no Windows).
77. 9.2 Removendo linhas duplicadas 67
9.2 Removendo linhas duplicadas
:%!uniq
O caractere “%” representa a regi˜ao equivalente ao arquivo atual inteiro. A
vers˜ao do Vim 7 em diante tem um comando sort que permite remover linhas
duplicadas uniq e ordenar, sem a necessidade de usar comandos externos, para
mais detalhes:
:h sort
9.3 Ordenando e removendo linhas duplicadas
no Vim 7
:sort u
Quando a ordena¸c˜ao envolver n´umeros faz-se:
:sort n
9.4 Beautifiers
A maior parte das linguagens de programa¸c˜ao possui ferramentas externas cha-
madas beautifiers, que servem para embelezar o c´odigo, atrav´es da indenta¸c˜ao e
espa¸camento. Por exemplo, para embelezar um arquivo HTML ´e poss´ıvel usar
a ferramenta “tidy1
”, do W3C:
:%!tidy
9.5 Editando comandos longos no Linux
´E comum no ambiente GNU/Linux a necessidade de digitar comandos longos
no terminal, para facilitar esta tarefa pode-se seguir estes passos:
1. Definir o Vim como editor padr˜ao do sistema editando o arquivo ‘.bashrc2
’:
#configura o vim como editor padr~ao
export EDITOR=vim
export VISUAL=vim
2. No terminal usar a combina¸c˜ao de teclas ‘Ctrl-x-e’. Esta combina¸c˜ao
de teclas abre o editor padr˜ao do sistema onde se deve digitar o comando
longo, ao sair do editor o terminal executa o comando editado.
1http://tidy.sourceforge.net/
2Arquivo de configura¸c˜ao do bash
78. 68 Comandos Externos
9.6 Compilando e verificando erros
:h cwindow quickfix-window
Se o seu projeto j´a possui um Makefile, ent˜ao vocˆe pode fazer uso do comando
:make para poder compilar seus programas no conforto de seu Vim:
:make
A vantagem de fazer isso ´e poder usar outra ferramenta bastante interessante,
a janela de quickfix:
:cw[indow]
O comando cwindow abrir´a uma janela em um split horizontal com a listagem
de erros e warnings. Vocˆe poder´a navegar pela lista usando os cursores e ir
diretamente para o arquivo e linha da ocorrˆencia.
Modificando o compilador, o comando make pode mudar sua a¸c˜ao.
:compiler javac
:compiler gcc
:compiler php
Note que php n˜ao tem um compilador. Logo, quando executado, o make ir´a
verificar por erros de sintaxes.
:compiler
O comando acima lista todos os compiladores suportados.
9.7 Grep
:h grep quickfix-window cw
Do mesmo jeito que vocˆe usa grep na sua linha de comando vocˆe pode usar o
grep interno do Vim. Exatamente do mesmo jeito:
:grep caminho padr~ao op¸c~oes
Use a janela de quickfix3
aqui tamb´em para exibir os resultados do grep e poder
ir diretamente a eles.
3:cope
79. 9.8 Indent 69
9.8 Indent
Indent4
´e um programa que indenta seu c´odigo fonte de acordo com os padr˜oes
configurados no seu arquivo HOME/.indent.pro. Vou pressupor que vocˆe j´a
saiba usar o indent e como fazer as configura¸c˜oes necess´arias para ele funcionar,
ent˜ao vamos ao funcionamento dele no Vim:
Para indentar um bloco de c´odigo, primeiro selecione-o com o modo visual line
(com V), depois ´e s´o entrar com o comando como se fosse qualquer outro co-
mando externo:
:!indent
No caso, como foi selecionado um bloco de c´odigo, ir˜ao aparecer alguns carac-
teres extras, mas o procedimento continua o mesmo:
:’,’!indent
9.9 Calculadora Cient´ıfica com o Vim
Para usar a fun¸c˜ao de Calculadora Cient´ıfica no Vim usamos uma ferramenta
externa, que pode ser o comando ‘bc’ do GNU/Linux, ou uma linguagem de pro-
grama¸c˜ao como Python ou Ruby, veremos como habilitar a calculadora usando
o Python. Obviamente esta linguagem de programa¸c˜ao deve estar instalada no
sistema em que se deseja usar seus recursos. Deve-se testar se a vers˜ao do Vim
tem suporte ao Python “:version”, em seguida colocam-se os mapeamentos no
“.vimrc”.
:command! -nargs=+ Calc :py print args
:py from math import *
Feito isto pode-se usar o comando “:Calc” como visto abaixo:
:Calc pi
:Calc cos(30)
:Calc pow(5,3)
:Calc 10.0/3
:Calc sum(xrange(1,101))
:Calc [x**2 for x in range(10)]
9.10 Editando sa´ıdas do Shell
Muitas vezes, precisamos manipular sa´ıdas do shell antes de envi´a-las por e-mail,
reportar ao chefe ou at´e mesmo salv´a-las. Utilizando
4http://www.gnu.org/software/indent
80. 70 Comandos Externos
vim -
ou
gvim -
a sa´ıda do Shell ´e redirecionada para o (G)Vim automaticamente, n˜ao sendo
necess´ario redirecion´a-la para um arquivo tempor´ario e, logo ap´os, abr´ı-lo para
edit´a-lo e modific´a-lo. Quem trabalha com sistemas de controle de vers˜ao como
svn pode visualizar as diferen¸cas entre o c´odigo que est´a sendo editado e o que
est´a no reposit´orio com sintaxe colorida desta forma:
svn diff | view -
Outra situa¸c˜ao em que se pode combinar o vim com saidas do shell ´e com o
comando ‘grep’. Usando-se a op¸c˜ao ‘-l’ do grep listamos apenas os arquivos
que correspondem a um padr˜ao.
grep -irl voyeg3r .
./src/img/.svn/entries
./src/Makefile
./src/vimbook.tex
Pode-se em seguida chamar o vim usando substitui¸c˜ao de comandos, como o
comando ‘!!’ corresponde ao ´ultimo comando, e neste caso a saida corresponde
a uma lista de arquivos que cont´em o padr˜ao a ser editado faz-se:
vim ${!!}
9.11 Log do Subversion
A vari´avel de ambiente $SVN EDITOR pode ser usada para se especificar o
caminho para o editor de texto de sua preferˆencia, a fim de us´a-lo na hora de
dar um commit usando o subversion.
export SVN_EDITOR=/usr/bin/vim
svn commit
Ser´a aberto uma sess˜ao no Vim, que depois de salva, ser´a usada para LOG do
commit.
9.12 Referˆencias
• http://www.dicas-l.com.br/dicas-l/20070119.php
• http://vim.wikia.com/wiki/Scientific_calculator
• http://docs.python.org/library/cmath.html
• http://docs.python.org/library/math.html
81. Cap´ıtulo 10
Verifica¸c˜ao Ortogr´afica
:h spell
O Vim possui um recurso nativo de verifica¸c˜ao ortogr´afica (spell) em tempo de
edi¸c˜ao, apontando palavras e express˜oes desconhecidas—usualmente erros de
grafia—enquanto o usu´ario as digita.
Basicamente, para cada palavra digitada o Vim procura por sua grafia em
um dicion´ario. N˜ao encontrando-a, a palavra ´e marcada como desconhecida
(sublinhando-a ou alterando sua cor), e fornece ao usu´ario mecanismos para
corrigi-la (atrav´es de sugest˜oes) ou cadastr´a-la no dicion´ario caso esteja de fato
grafada corretamente.
10.1 Habilitando a verifica¸c˜ao ortogr´afica
:h spell, spelllang
A verifica¸c˜ao ortogr´afica atua em uma linguagem (dicion´ario) por vez, portanto,
sua efetiva habilita¸c˜ao depende da especifica¸c˜ao desta linguagem. Por exemplo,
para habilitar no arquivo em edi¸c˜ao a verifica¸c˜ao ortogr´afica na l´ıngua portu-
guesa (pt), assumindo-se a existˆencia do dicion´ario em quest˜ao:
:setlocal spell spelllang=pt
ou de forma abreviada:
:setl spell spl=pt
Trocando-se setlocal (setl) por apenas set (se) faz com que o comando tenha
efeito global, isto ´e, todos os arquivos da sess˜ao corrente do Vim estariam sob
efeito da verifica¸c˜ao ortogr´afica e do mesmo dicion´ario (no caso o pt).
A desabilita¸c˜ao da verifica¸c˜ao d´a-se digitando:
82. 72 Verifica¸c˜ao Ortogr´afica
:setlocal nospell
:set nospell (efeito global)
Caso queira-se apenas alterar o dicion´ario de verifica¸c˜ao ortogr´afica, suponha
para a l´ıngua inglesa (en), basta:
:setlocal spelllang=en
:set spelllang=en (efeito global)
10.1.1 Habilita¸c˜ao autom´atica na inicializa¸c˜ao
:h autocmd, Filetype, BufNewFile, BufRead
`As vezes torna-se cansativo a digita¸c˜ao expl´ıcita do comando de habilita¸c˜ao da
verifica¸c˜ao ortogr´afica sempre quando desejada. Seria conveniente se o Vim
habilitasse automaticamente a verifica¸c˜ao para aqueles tipos de arquivos que
comumente fazem uso da verifica¸c˜ao ortogr´afica, como por exemplo arquivos
“texto”. Isto ´e poss´ıvel editando-se o arquivo de configura¸c˜ao do Vim .vimrc
(veja Cap. 12) e incluindo as seguintes linhas:
autocmd Filetype text setl spell spl=pt
autocmd BufNewFile,BufRead *.txt setl spell spl=pt
Assim habilita-se automaticamente a verifica¸c˜ao ortogr´afica usando o dicion´a-
rio da l´ıngua portuguesa (pt) para arquivos do tipo texto e os terminados
com a extens˜ao .txt. Mais tecnicamente, diz-se ao Vim para executar o co-
mando setl spell spl=pt sempre quando o tipo do arquivo (Filetype) for
text (texto) ou quando um arquivo com extens˜ao .txt for carregado (BufRead)
ou criado (BufNewFile).
10.2 O dicion´ario de termos
A qualidade da verifica¸c˜ao ortogr´afica do Vim est´a diretamente ligada `a com-
pletude e corretude do dicion´ario da linguagem em quest˜ao. Dicion´arios pouco
completos s˜ao inconvenientes `a medida que acusam falso positivos em demasia;
pior, dicion´arios contendo palavras grafadas incorretamente, al´em de acusarem
falso positivos, induzem o usu´ario ao erro ao sugerirem grafias erradas.
´E razoavelmente comum o Vim j´a vir instalado com dicion´arios de relativa qua-
lidade para algumas linguagens (ao menos inglˆes, habitualmente). Entretanto,
ainda ´e raro para a maioria das instala¸c˜oes do Vim trazer por default um di-
cion´ario realmente completo e atualizado da l´ıngua portuguesa. A pr´oxima
se¸c˜ao sintetiza, pois, os passos para a instala¸c˜ao de um excelente—e dispon´ıvel
livremente—dicion´ario de palavras para a l´ıngua portuguesa.
83. 10.2 O dicion´ario de termos 73
10.2.1 Dicion´ario portuguˆes segundo o acordo ortogr´afico
A equipe do projeto BrOffice.org e seus colaboradores mantˆem e disponibili-
zam livremente um grandioso dicion´ario de palavras da l´ıngua portuguesa. Al´em
do expressivo n´umero de termos, o dicion´ario contempla as mudan¸cas ortogr´a-
ficas definidas pelo Acordo Ortogr´afico [8] que entraram em vigor no in´ıcio de
2009.
A instala¸c˜ao envolve trˆes passos, s˜ao eles:
1. obten¸c˜ao do dicion´ario atrav´es do site BrOffice.org;
2. convers˜ao para o formato interno de dicion´ario do Vim; e
3. instala¸c˜ao dos arquivos resultantes.
Obten¸c˜ao do dicion´ario
O dicion´ario pode ser obtido no site do br.office.org [9]. O arquivo baixado
encontra-se compactado no formato Zip, bastando portanto descompact´a-lo com
qualquer utilit´ario compat´ıvel com este formato, por exemplo, o comando unzip.
Convers˜ao do dicion´ario
:h mkspell
Ap´os a descompacta¸c˜ao, os arquivos pt_BR.aff e pt_BR.dic, extra´ıdos no dire-
t´orio corrente1
, ser˜ao usados para a cria¸c˜ao dos dicion´arios no formato interno
do Vim2
. A convers˜ao propriamente dita ´e feita pelo pr´oprio Vim atrav´es do
comando mkspell:
1. Carrega-se o Vim a partir do diret´orio onde foram extra´ıdos pt_BR.aff e
pt_BR.dic
2. O comando mkspell ´e ent˜ao executado como:
:mkspell pt pt_BR
O Vim ent˜ao gera um arquivo de dicion´ario da forma pt.codifica¸c~ao.spl,
onde codifica¸c~ao ´e a codifica¸c˜ao de caracteres do sistema, normalmente
utf-8 ou latin1; caso queira-se um dicion´ario em uma codifica¸c˜ao diferente da
padr˜ao ser´a preciso ajustar a vari´avel encoding antes da invoca¸c˜ao do comando
mkspell:
:set encoding=codifica¸c~ao
:mkspell pt pt_BR
1Eventualmente, dependendo da vers˜ao do pacote de corre¸c˜ao ortogr´afica, os arquivos de
dicion´ario podem ser extra´ıdos no subdiret´orio dictionaries ou outro qualquer.
2O formato interno de dicion´ario do Vim assegura melhor desempenho, em termos de
agilidade e consumo de mem´oria, quando a verifica¸c˜ao ortogr´afica do editor encontra-se em
opera¸c˜ao.
84. 74 Verifica¸c˜ao Ortogr´afica
Instala¸c˜ao do(s) dicion´ario(s) gerado(s)
:h runtimepath
Finalmente, o dicion´ario gerado—ou os dicion´arios, dependendo do uso ou n˜ao
de codifica¸c˜oes diferentes—deve ser copiado para o subdiret´orio spell/ dentro
de qualquer caminho (diret´orio) que o Vim “enxergue”. A lista de caminhos
lidos pelo Vim encontra-se na vari´avel runtimepath, que pode ser inspecionada
atrav´es de:
:set runtimepath
´E suficiente ent˜ao copiar o dicion´ario pt.codifica¸c~ao.spl para o subdiret´o-
rio spell/ em qualquer um dos caminhos listados atrav´es do comando mostrado.
10.3 Comandos relativos `a verifica¸c˜ao ortogr´a-
fica
10.3.1 Encontrando palavras desconhecidas
Muito embora o verificador ortogr´afico cheque imediatamente cada palavra digi-
tada, sinalizando-a ao usu´ario caso n˜ao a reconhe¸ca, `as vezes ´e mais apropriado
realizar a verifica¸c˜ao ortogr´afica do documento por inteiro. O Vim disp˜oe de
comandos espec´ıficos para busca e movimenta¸c˜ao em palavras grafadas incorre-
tamente (desconhecidas) no escopo do documento, dentre eles:
]s ..... vai para a pr´oxima palavra desconhecida
[s ..... como o ]s, mas procura no sentido oposto
Ambos os comandos aceitam um prefixo num´erico, que indica a quantidade
de movimenta¸c˜oes (buscas). Por exemplo, o comando 3]s vai para a terceira
palavra desconhecida a partir da posi¸c˜ao atual.
10.3.2 Tratamento de palavras desconhecidas
H´a basicamente duas opera¸c˜oes poss´ıveis no tratamento de uma palavra apon-
tada pelo verificador ortogr´afico do Vim como desconhecida:
1. corrigi-la – identificando o erro com ou sem o aux´ılio das sugest˜oes do
Vim.
2. cadastr´a-la no dicion´ario – ensinando o Vim a reconhecer sua grafia.
Assume-se nos comandos descritos nas se¸c˜oes a seguir que o cursor do editor
encontra-se sobre a palavra marcada como desconhecida.
85. 10.3 Comandos relativos `a verifica¸c˜ao ortogr´afica 75
Corre¸c˜ao de palavras grafadas incorretamente
´E poss´ıvel que na maioria das vezes o usu´ario perceba qual foi o erro cometido na
grafia, de forma que o pr´oprio possa corrigi-la sem aux´ılio externo. No entanto,
algumas vezes o erro n˜ao ´e evidente, e sugest˜oes fornecidas pelo Vim podem
ser bastante convenientes. Para listar as sugest˜oes para a palavra em quest˜ao
executa-se:
z= ..... solicita sugest~oes ao verificador ortogr´afico
Se alguma das sugest˜oes ´e v´alida – as mais prov´aveis est˜ao nas primeiras posi¸c˜oes
– ent˜ao basta digitar seu prefixo num´erico e pressionar Enter. Se nenhuma
sugest˜ao for adequada, basta simplesmente pressionar Enter e ignorar a cor-
re¸c˜ao.
Cadastramento de novas palavras no dicion´ario
Por mais completo que um dicion´ario seja, eventualmente palavras, especial-
mente as de menor abrangˆencia, ter˜ao que ser cadastradas a fim de aprimorar
a exatid˜ao da verifica¸c˜ao ortogr´afica. A manuten¸c˜ao do dicion´ario d´a-se pelo
cadastramento e retirada de palavras:
zg ..... adiciona a palavra no dicion´ario
zw ..... retira a palavra no dicion´ario, marcando-a como
‘desconhecida’
86. Cap´ıtulo 11
Salvando Sess˜oes de
Trabalho
Suponha a situa¸c˜ao em que um usu´ario est´a trabalhando em um projeto no qual
v´arios arquivos s˜ao editados simultaneamente; quatro arquivos est˜ao abertos,
algumas macros foram criadas e vari´aveis que n˜ao constam no vimrc foram de-
finidas. Em uma situa¸c˜ao normal, se o Vim for fechado a quase totalidade dessas
informa¸c˜oes se perde1
; para evitar isto uma sess˜ao pode ser criada, gerando-se
um “retrato do estado atual”, e ent˜ao restaurada futuramente pelo usu´ario—na
pr´atica ´e como se o usu´ario n˜ao tivesse sa´ıdo do editor.
Uma sess˜ao do Vim guarda, portanto, uma s´erie de informa¸c˜oes sobre a edi¸c˜ao
corrente, de modo a permitir que o usu´ario possa restaur´a-la quando desejar.
Sess˜oes s˜ao bastante ´uteis, por exemplo, para se alternar entre diferentes proje-
tos, carregando-se rapidamente os arquivos e defini¸c˜oes relativas a cada projeto.
11.1 O que uma sess˜ao armazena?
Uma sess˜ao ´e composta das seguintes informa¸c˜oes:
• Mapeamentos globais
• Vari´aveis globais
• Arquivos abertos incluindo a lista de buffers
• Diret´orio corrente (:h curdir)
• Posi¸c˜ao e tamanho das janelas (o layout)
1Algumas informa¸c˜oes, no entanto, s˜ao automaticamente armazenadas no arquivo viminfo;
veja :h viminfo
87. 11.2 Criando sess˜oes 77
11.2 Criando sess˜oes
Sess˜oes s˜ao criadas atrav´es do comando :mksession:
:mks[ession] sessao.vim .... cria a sess~ao e armazena-a em sessao.vim
:mks[ession]! sessao.vim ... salva a sess~ao e sobrescreve-a em sessao.vim
11.3 Restaurando sess˜oes
Ap´os gravar sess˜oes, elas podem ser carregadas ao iniciar o Vim:
vim -S sessao.vim
ou ent˜ao de dentro do pr´oprio Vim (no modo de comando):
:so sessao.vim
Ap´os restaurar a sess˜ao, o nome da sess˜ao corrente ´e acess´ıvel atrav´es de uma
vari´avel interna “v:this_session”; caso queira-se exibir na linha de comando
o nome da sess˜ao ativa (incluindo o caminho), faz-se:
:echo v:this_session
Podemos fazer mapeamentos para atualizar a sess˜ao atual e exibir detalhes da
mesma:
mapeamento para gravar sess~ao
nmap F4 :waBarexe mksession! . v:this_sessionCR:so ~/sessions/
mapeamento para exibir a sess~ao ativa
map s-F4 esc:echo v:this_sessioncr
11.4 Viminfo
Se o Vim for fechado e iniciado novamente, normalmente perder´a uma por¸c˜ao
consider´avel de informa¸c˜oes. A diretiva viminfo pode ser usada para memorizar
estas informa¸c˜oes.
• Hist´orico da linha de comando
• Hist´orico de buscas
• Hist´orico de entradas input-line history
• Conte´udo de registros n˜ao vazios
• Marcas de v´arios arquivos
88. 78 Salvando Sess˜oes de Trabalho
• ´Ultimo padr˜ao de busca/substitui¸c˜ao
• A lista de buffers
• Vari´aveis globais
Deve-se colocar no arquivo de configura¸c˜ao algo como:
set viminfo=%,’50,100,/100,:100,n
Algumas op˜oes da diretiva viminfo:
! Quando inclu´ıdo salva e restaura vari´aveis globais (vari´aveis com letra mai´us-
cula) e que n˜ao cont´em letras em min´usculo como MANTENHAISTO.
” N´umero m´aximo de linhas salvas para cada registro.
% Quando inclu´ıdo salva e restaura a lista de buffers. Caso o Vim seja iniciado
com um nome como argumento, a lista de buffers n˜ao ´e restaurada. Buffers
sem nome e buffers de ajuda n˜ao s˜ao armazenados no viminfo.
’ N´umero m´aximo de arquivos rec´em editados.
/ M´aximo de itens do hist´orico de buscas.
: M´aximo de itens do hist´orico da linha de comando
N´umero m´aximo de linhas salvas por cada registro, se zero os registros n˜ao
ser˜ao salvos. Quando n˜ao inclu´ıdo, todas as linhas s˜ao salvas.
Para ver mais op¸c˜oes sobre o arquivo ‘viminfo’ leia ‘:h viminfo’. Pode-se tam-
b´em usar um arquivo de “Sess˜ao”. A diferen¸ca ´e que ‘viminfo’ n˜ao depende do
local de trabalho (escopo). Quando o arquivo ‘viminfo’ existe e n˜ao est´a vazio,
as informa¸c˜oes novas s˜ao combinadas com as existentes. A op¸c˜ao ‘viminfo’ ´e
uma string contendo informa¸c˜oes sobre o que deve ser armazenado, e cont´em
limites de o quanto vai ser armazenado para cada item.
89. Cap´ıtulo 12
Como Editar Preferˆencias
no Vim
O arquivo de preferˆencias do Vim ´e nomeado vimrc, um arquivo oculto que
normalmente encontra-se no diret´orio de trabalho (home) do usu´ario:
~/.vimrc
/home/usuario/.vimrc
No sistema operacional Windows o arquivo costuma ser:
~_vimrc
c:documents and settingsusuario_vimrc
12.1 Onde colocar plugins e temas de cor
No Windows deve haver uma pasta chamada ‘vimfiles’ (caso n˜ao exista deve-se
cri´a-la), que fica em:
c:documents and settingsusuariovimfiles
No GNU/Linux a pasta de arquivos do Vim ´e chamada .vim, comumente ar-
mazenada em
/home/user/.vim
Tanto em .vim como vimfiles encontram-se usualmente as seguintes pastas:
vimfiles ou .vim
|
+--color
90. 80 Como Editar Preferˆencias no Vim
|
+--doc
|
+--syntax
|
+--plugin
Os plugins, como se pode deduzir, devem ser colocados no diret´orio denominado
plugin. Na se¸c˜ao Plugins 15 (p. 106) est˜ao descritos alguns plugins para o
Vim.
12.2 Coment´arios
Coment´arios s˜ao linhas que s˜ao ignoradas pelo interpretador Vim e servem nor-
malmente para descri¸c˜ao de comandos e a¸c˜oes, deixando portanto mais leg´ıvel e
did´atico o arquivo de configura¸c˜ao. Uma linha ´e um coment´ario se seu primeiro
caractere ´e uma aspa ‘’:
linhas come¸cadas com aspas s~ao coment´arios
e portanto ser~ao ignoradas pelo Vim
Recomenda-se usar coment´arios ao adicionar ou modificar comandos no arquivo
vimrc, pois assim torna-se mais f´acil futuras leituras e modifica¸c˜oes neste ar-
quivo.
12.3 Efetiva¸c˜ao das altera¸c˜oes no vimrc
As altera¸c˜oes no vimrc s´o ser˜ao efetivadas na pr´oxima vez que o Vim for aberto,
a n˜ao ser que o recarregamento do arquivo de configura¸c˜ao seja instru´ıdo expli-
citamente:
:source ~/vimrc ....... se estiver no GNU/Linux
:source ~/_vimrc ...... caso use o Windows
:so arquivo ........... ‘so’ ´e uma abrevia¸c~ao de ‘source’
12.4 Set
Os comandos set, respons´aveis por atribuir valores `a vari´aveis, podem ser co-
locados no .vimrc:
set nu
ou digitados como comandos:
:set nu
91. 12.4 Set 81
set number ............... mostra numera¸c~ao de linhas
set nu ................... simplifica¸c~ao de ‘number’
set showmode ............. mostra o modo em que estamos
set showcmd .............. mostra no status os comandos inseridos
set tabstop=4 ............ tamanho das tabula¸c~oes
set ts=4 ................. simplifica¸c~ao de ‘tabstop’
set shiftwidth=4 ......... quantidade de espa¸cos de uma
tabula¸c~ao
set sw=4 ................. simplifica¸c~ao de ‘shiftwidth’
syntax on ................ habilita cores
syn on ................... simplifica¸c~ao de ‘syntax’
colorscheme tema ......... esquema de cores ‘syntax highlight’
autochdir ................ configura o diret´orio de trabalho
set hls .................. destaca com cores os termos procurados
set incsearch ............ habilita a busca incremental
set ai ................... auto identa¸c~ao
set aw ................... salva automaticamente ao trocar de
‘buffer’
set ignorecase ........... ignora mai´usculas e min´usculas nas
buscas
set ic ................... simplifica¸c~ao de ignorecase
set smartcase ............ numa busca em mai´usculo habilita
‘case’
set scs .................. sin^onimo de ‘smartcase’
set backup ............... habilita a cria¸c~ao de arquivos de
backup
set bk ................... simplifica¸c~ao de ‘backup’
set backupext=.backup .... especifica a extens~ao do arquivo de
backup
set bex=.backup .......... simplifica¸c~ao de backupext
set backupdir=~/.backup,./ diret´orio(s) para arquivos de backup
set bdir ................. simplifica¸c~ao de ‘backupdir’
set nobackup ............. evita a cria¸c~ao de arquivos de backup
ste nobk ................. simplifica¸c~ao de ‘nobackup’
set cursorline ........... abrevia¸c~ao de cursor line (destaca
linha atual)
set cul .................. simplifica¸c~ao de ‘cursorline’
set ttyfast .............. melhora o redraw de janelas.
set columns=88 ........... deixa a janela com 88 colunas.
set mousemodel=popup ..... exibe o conte´udo de folders e
sugest~oes spell
set viminfo=%,’50,100,/100,:100,n armazena op¸c~oes (buffers)
Se ao iniciar o vim obtivermos mensagens de erros e houver d´uvida se o erro
´e no vim ou em sua configura¸c˜ao, pode-se inicia-lo sem que o mesmo carregue
o arquivo ‘.vimrc’.
:vim -u NONE
92. 82 Como Editar Preferˆencias no Vim
12.5 Ajustando par´agrafos em modo normal
O comando ‘gqap’ ajusta o par´agrafo atual em modo normal. usando a
op¸c˜ao ‘:set nojoinspaces’ o vim colocar´a dois espa¸cos ap´os o ponto final ao
se ajustar os par´agrafos.
geralmente usamos ‘^I’ para representar uma tabula¸c˜ao Tab, e ‘$’ para in-
dicar o fim de linha. Mas ´e poss´ıvel customizar essas op¸c˜oes. sintaxe:
set listchars=key:string,key:string
- eol:{char}
Define o caracter a ser posto depois do fim da linha
- tab:{char1}{char2}
O tab ´e mostrado pelo primeiro caracter {char1} e
seguido por {char2}
- trail:{char}
Esse caracter representa os espa¸cos em branco.
- extends:{char}
Esse caracter representa o in´ıcio do fim da linha
sem quebr´a-la
Est´a op¸c~ao funciona com a op¸c~ao nowrap habilitada
exemplo 1:
set listchars=tab:-,trail:.,eol:#,extends:@
exemplo 2:
set listchars=tab:-
exemplo 3:
set listchars=tab:-
exemplo 4:
set nowrap Essa op¸c~ao desabilita a quebra de linha
set listchars=extends:+
Caso esteja usando o gvim pode setar um esquema de cores
set colo desert
12.6 Exibindo caracteres invis´ıveis
:set list
93. 12.7 Definindo registros previamente 83
12.7 Definindo registros previamente
Definindo uma macro de nome s para ordenar e retirar linhas duplicadas
let @s=:sort u
Para executar o registro s definido acima fa¸ca:
@s
O Vim colocar´a no comando
:sort -u
Bastando pressionar Enter. Observa¸c˜ao: Este registro pr´evio pode ficar no
vimrc ou ser digitado em comando “:”
:5,20sort u
da linha 5 at´e a linha 20 ordene e retire duplicados
:sort n
ordene meu documento considerando n´umeros
isto ´e ´util pois se a primeira coluna contiver
n´umeros a ordena¸c~ao pode ficar errada caso n~ao usemos
o par^ametro ‘‘n’’
12.8 Mapeamentos
:h key-mapping, mapping, index
Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende
da criatividade do usu´ario e do quanto conhece o Vim, com eles podemos con-
trolar a¸c˜oes com quaisquer teclas, mas antes temos que saber que para criar
mapeamentos, precisamos conhecer a maneira de representar as teclas e combi-
na¸c˜oes. Alguns exemplos:
tecla ....... tecla mapeada
c-x ....... Ctrl-x
left ...... seta para a esquerda
right ..... seta para a direita
c-m-a ..... Ctrl-Alt-a
cr ........ Enter
Esc ....... Escape
leader .... normalmente
bar ....... | pipe
cword ..... palavra sob o cursor
94. 84 Como Editar Preferˆencias no Vim
cfile ..... arquivo sob o cursor
cfile ..... arquivo sob o cursor sem extens~ao
sfile ..... conte´udo do arquivo sob o cursor
left ...... salta um caractere para esquerda
up ........ equivale clicar em ‘seta acima’
m-f4 ...... a tecla alt - m mais a tecla f4
c-f ....... Ctrl-f
bs ........ backspace
space ..... espa¸co
tab ....... tab
No Vim podemos mapear uma tecla para o modo normal, realizando determi-
nada opera¸c˜ao e a mesma tecla pode desempenhar outra fun¸c˜ao qualquer em
modo de inser¸c˜ao ou comando, veja:
mostra o nome do arquivo com o caminho
map F2 :echo expand(%:p)
insere um texto qualquer
imap F2 Nome de uma pessoa
A ´unica diferen¸ca nos mapeamentos acima ´e que o mapeamento para modo de
inser¸c˜ao come¸ca com ‘i’, assim como para o modo “comando” ‘:’ come¸ca com
‘c’ no caso ‘cmap’. O comando ‘:echo’ pode ser abreviado assim: ‘:ec’.
12.8.1 Recarregando o arquivo de configura¸c˜ao
Cada altera¸c˜ao no arquivo de configura¸c˜ao do Vim s´o ter´a efeito na pr´oxima vez
que vocˆe abrir o Vim a menos que vocˆe coloque isto dentro do mesmo
recarregar o vimrc
Source the .vimrc or _vimrc file, depending on system
if term == win32 || pcterm || has(gui_win32)
map ,v :e $HOME/_vimrcCR
nmap F12 :C-usource ~/_vimrc BAR echo Vimrc recarregado!CR
else
map ,v :e $HOME/.vimrcCR
nmap F12 :C-usource ~/.vimrc BAR echo Vimrc recarregado!CR
endif
Agora basta pressionar “F12” em modo normal e as altera¸c˜oes passam a valer
instantaneamente, e para chamar o ‘vimrc’ basta usar.
,v
Os mapeamentos abaixo s˜ao ´uteis para quem escreve c´odigos HTML, permi-
tem inserir caracteres reservados do HTML usando uma barra invertida para
proteger os mesmos, o Vim substituir´a os “barra alguma coisa” pelo caractere
correspondente.
95. 12.8 Mapeamentos 85
inoremap amp; amp;amp;
inoremap lt; amp;lt;
inoremap gt; amp;gt;
inoremap . amp;middot;
O termo inoremap significa: em modo de inser¸c˜ao n˜ao remapear, ou seja ele
mapeia o atalho e n˜ao permite que o mesmo seja remapeado, e o mapeamento
s´o funciona em modo de inser¸c˜ao, isso significa que um atalho pode ser mapeado
para diferentes modos de opera¸c˜ao.
Veja este outro mapeamento:
map F11 Esc:set nu!cr
Permite habilitar ou desabilitar n´umeros de linha do arquivo corrente. A excla-
ma¸c˜ao ao final torna o comando booleano, ou seja, se a numera¸c˜ao estiver ativa
ser´a desabilitada, caso contr´ario ser´a ativada. O “cr” ao final representa um
Enter.
12.8.2 Limpando o “registro” de buscas
A cada busca, se a op¸c˜ao ‘hls’1
estiver habilitada o Vim faz um destaque co-
lorido, para desabilitar esta op¸c˜ao pode-se criar um mapeamento qualquer, no
caso abaixo usando a combina¸c˜ao de teclas “S-F11”.
nno S-F11 Esc:let @/=CR
´E um mapeamento para o modo normal que faz com que a combina¸c˜ao de teclas
Shift-F11 limpe o “registro” de buscas
12.8.3 Destacar palavra sob o cursor
nmap s-f :let @/=CR
O atalho acima ‘s-f’ corresponde a ‘Shift-f’.
12.8.4 Contar ocorrˆencias de uma palavra
contagem de ocorr^encias de uma palavra (case insensitive)
busca somente ocorr^encias exatas
nmap F4 escmz:%s/c(c-r=expand(cword)cr)//gncr‘z
busca parcial, ou seja acha palavra como parte de outra
nmap s-F4 escmz:%s/c(c-r=expand(cword)cr)//gncr‘z
1hls ´e uma abrevia¸c˜ao de hightlight search
96. 86 Como Editar Preferˆencias no Vim
12.8.5 Remover linhas em branco duplicadas
map ,d Esc:%s/(^n{2,})/r/gcr
No mapeamento acima estamos associando o atalho:
,d
. . . `a a¸c˜ao desejada, fazer com que linhas em branco sucessivas sejam substitu´ı-
das por uma s´o linha em branco, vejamos como funciona:
map ......... mapear
,d .......... atalho que quermos
Esc ....... se estive em modo de inser¸c~ao sai
: ........... em modo de comando
% ........... em todo o arquivo
s ........... substitua
n .......... quebra de linha
{2,} ........ duas ou mais vezes
r .......... trocado por r Enter
g ........... globalmente
cr ........ confirma¸c~ao do comando
As barras invertidas podem n˜ao ser usadas se o seu Vim estiver com a op¸c˜ao
magic habilitada
:set magic
Por acaso este ´e um padr˜ao portanto tente usar assim pra ver se funciona
map ,d :%s/n{2,}/r/gcr
12.8.6 Mapeamento para Calcular Express˜oes
Os mapeamentos abaixo exibem o resultado das quatro opera¸c˜oes b´asicas (soma,
subtra¸c˜ao, multiplica¸c˜ao e divis˜ao). O primeiro para o modo normal no qual
posiciona-se o cursor no primeiro caractere da express˜ao tipo“5*9”e em seguida
pressiona-se “Shift-F1”, o segundo para o modo insert em que, ap´os digitada a
express˜ao pressiona-se o mesmo atalho.
calculadora
map s-f1 esc0myEA=c-r=c-rmenteresc
imap s-f1 spaceescmyBEa=c-r=c-rmenterdel
Para efetuar c´alculos com maior precis˜ao e tamb´em resolver problemas como
potˆencias ra´ızes, logaritmos pode-se mapear comandos externos, como a biblio-
teca matem´atica da linguagem de programa¸c˜ao Python. Neste link [10] h´a um
manual que ensina a realizar este procedimento, ou acesse o cap´ıtulo 2.16 na
p´agina 17.
97. 12.9 Autocomandos 87
12.8.7 Mapeamentos globais
Podemos fazer mapeamentos globais ou que funcionam em apenas um modo:
map - funciona em qualquer modo
nmap - apenas no modo Normal
imap - apenas no modo de Inser¸c~ao
Mover linhas com Ctrl-↓ ou Ctrl-↑:
tem que estar em modo normal!
nmap C-Down ddp
nmap C-Up ddkP
Salvando com uma tecla de fun¸c˜ao:
salva com F9
nmap F9 :wcr
F10 - sai do Vim
nmap F10 Esc:qcr
12.8.8 Convertendo as iniciais de um documento para mai´us-
culas
MinusculasMaiusculas: converte a primeira letra de cada
frase para MAI´USCULAS
nmap ,mm :%s/C([.!?][])’]*($|[ ])_s*)(l)/1U3/gCR
Caso queira confirma¸c~ao coloque uma letra ‘‘c’’ no final da
linha acima:
(...) 3/gcCR
12.9 Autocomandos
:h autocmd.txt
Autocomandos habilitam comandos autom´aticos para situa¸c˜oes espec´ıficas. Para
executar determinada a¸c˜ao ao iniciar um novo arquivo o autocomando dever´a
obedecer este padr˜ao:
au BufNewFile tipo a¸c~ao
Veja um exemplo:
au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim
98. 88 Como Editar Preferˆencias no Vim
No exemplo acima o Vim aplica autocomandos para arquivos novos“BufNewfile”
ou existentes “BufRead” terminados em txt, e para estes tipos carrega um ar-
quivo de syntax, ou seja, um esquema de cores espec´ıfico.
http://aurelio.net/doc/vim/txt.vim coloque em ~/.vim/syntax
au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim
Para arquivos do tipo texto ‘*.txt’ use um arquivo de syntax em particular.
O autocomando abaixo coloca um cabe¸calho para scripts bash caso a linha 1
esteja vazia, observe que os arquivos em quest˜ao tem que ter a extens˜ao ‘.sh’.
au BufNewFile,BufRead *.sh if getline(1) == | normal ,sh
Para configurar o vim de modo que o diret´orio corrente fique no path coloque
este c´odigo no ‘vimrc’.
fonte: wikia - wiki sobre o vim
if exists(’+autochdir’)
set autochdir
else
autocmd BufEnter * silent! lcd %:p:h:gs/ / /
endif
12.9.1 Exemplos pr´aticos de autocomandos
:h expandtab, retab
Detectando indenta¸c˜ao fora do padr˜ao
H´a situa¸c˜oes em que ´e necess´aria a uniformiza¸c˜ao de a¸c˜oes, por exemplo, em
c´odigos Python deve-se manter um padr˜ao para a indenta¸c˜ao, ou ser´a com es-
pa¸cos ou ser´a com tabula¸c˜oes, n˜ao se pode misturar os dois pois o interpretador
retornaria um erro. Outra situa¸c˜ao em que misturar espa¸cos com tabula¸c˜oes
ocasiona erros ´e em c´odigos LATEX, ao compilar o documento a formata¸c˜ao n˜ao
sai como desejado. At´e que se perceba o erro leva um tempo. Para configurar
o vim de forma que ele detecte este tipo de erro ao entrar no arquivo:
au! VimEnter * match ErrorMsg /^t+/
explica¸c~ao para o autocomando acima
au! ............... automaticamente
VimEnter .......... ao entrar no vim
* ................. para qualquer tipo de arquivo
match ErrorMsg .... destaque como erro
/ ................. inicio de um padr~ao
^ ................. come¸co de linha
t ................ tabula¸c~ao
+ ................ uma vez ou mais
/ ................. fim do padr~ao de buscas
99. 12.10 Fun¸c˜oes 89
Para evitar que este erro se repita, ou seja, que sejam adicionados no come¸co
de linha espa¸cos no lugar de tabula¸c˜oes adiciona-se ao ˜/.vimrc
set expandtab
´E perfeitamente poss´ıvel um autocomando que fa¸ca direto a substitui¸c˜ao de
tabula¸c˜oes por espa¸cos, mas neste caso n˜ao ´e recomendado que o autocomando
se aplique a todos os tipos de aquivos.
Inserindo automaticamente modelos de documento
Pode-se criar um autocomando para inserir um modelo de documento ‘html’
por exemplo de forma autom´atica, ou seja, se vocˆe criar um novo documento do
tipo ‘html’ o vim colocar´a em seu conte´udo um modelo pre-definido.
au BufNewFile *.html 0r ~/.vim/skel/skel.html
12.10 Fun¸c˜oes
12.10.1 Fechamento autom´atico de parˆenteses
--------------------------------------
Ativa fechamento autom´atico para par^entese
Set automatic expansion of parenthesis/brackets
inoremap ( ()Esc:call BC_AddChar(‘‘)’’)cri
inoremap { {}Esc:call BC_AddChar(‘‘}’’)cri
inoremap [ []Esc:call BC_AddChar(‘‘]’’)cri
‘‘ ’’ ‘‘’’Esc:call BC_AddChar(‘‘’’)cri
mapeia Ctrl-j para pular fora de par^enteses colchetes etc...
inoremap C-j Esc:call search(BC_GetChar(), ‘‘W’’)cra
Function for the above
function! BC_AddChar(schar)
if exists(‘‘k’’)
let b:robstack = b:robstack . a:schar
else
let b:robstack = a:schar
endif
endfunction
function! BC_GetChar()
let l:char = b:robstack[strlen(b:robstack)-1]
let b:robstack = strpart(b:robstack, 0, strlen(b:robstack)-1)
return l:char
endfunction
’’’Outra op¸c~ao para fechamento de par^enteses’’’
100. 90 Como Editar Preferˆencias no Vim
Fechamento autom´atico de par^enteses
imap { {}left
imap ( ()left
imap [ []left
pular fora dos par^enteses, colchetes e chaves, mover o cursor
no modo de inser¸c~ao
imap c-l Escrighta
imap c-h Esclefta
12.10.2 Fun¸c˜ao para barra de status
set statusline=%F%m%r%h%w
[FORMAT=%{ff}]
[TYPE=%Y]
[ASCII=%03.3b]
[HEX=%02.2B]
[POS=%04l,%04v][%p%%] [LEN=%L]
Caso este c´odigo n˜ao funcione acesse este link [11].
12.10.3 Rolar outra janela
Se vocˆe dividir janelas tipo
Ctrl-w n
pode colocar esta fun¸c˜ao no seu .vimrc
rola janela alternativa
fun! ScrollOtherWindow(dir)
if a:dir == ‘‘n’’
let move = ‘‘’’
elseif a:dir == ‘‘p’’
let move = ‘‘’’
endif
exec ‘‘p’’ . move . ‘‘p’’
endfun
nmap silent M-Down :call ScrollOtherWindow(‘‘n’’)CR
nmap silent M-Up :call ScrollOtherWindow(‘‘p’’)CR
Esta fun¸c˜ao ´e acionada com o atalho Alt-↑ e Alt-↓.
12.10.4 Fun¸c˜ao para numerar linhas
No site wikia h´a um c´odigo de fun¸c˜ao para numerar linhas [12]
101. 12.10 Fun¸c˜oes 91
12.10.5 Fun¸c˜ao para trocar o esquema de cores
function! SIDSwitchColorSchemes()
if exists(‘‘e’’)
if g:colors_name == ’native’
colorscheme billw
elseif g:colors_name == ’billw’
colorscheme desert
elseif g:colors_name == ’desert’
colorscheme navajo-night
elseif g:colors_name == ’navajo-night’
colorscheme zenburn
elseif g:colors_name == ’zenburn’
colorscheme bmichaelsen
elseif g:colors_name == ’bmichaelsen’
colorscheme wintersday
elseif g:colors_name == ’wintersday’
colorscheme summerfruit
elseif g:colors_name == ’summerfruit’
colorscheme native
endif
endif
endfunction
map silent F6 :call SIDSwitchColorSchemes()CR
baixe os esquemas neste link [13].
12.10.6 Uma fun¸c˜ao para inserir cabe¸calho de script
para chamar a fun¸c˜ao basta pressionar ‘,sh’ em modo normal
Cria um cabe¸calho para scripts bash
fun! InsertHeadBash()
normal(1G)
:set ft=bash
:set ts=4
call append(0, ‘‘h’’)
call append(1, ‘‘:’’ . strftime(%a %d/%b/%Y hs %H:%M))
call append(2, # ultima modifica¸c~ao:‘‘(’’%a %d/%b/%Y hs %H:%M))
call append(3, # NOME DA SUA EMPRESA)
call append(3, # Prop´osito do script)
normal($)
endfun
map ,sh :call InsertHeadBash()cr
12.10.7 Fun¸c˜ao para inserir cabe¸calhos Python
fun¸c~ao para inserir cabe¸calhos Python
102. 92 Como Editar Preferˆencias no Vim
fun! BufNewFile_PY()
normal(1G)
:set ft=python
:set ts=2
call append(0, #!/usr/bin/env python)
call append(1, # # -*- coding: ISO-8859-1 -*-)
call append(2, ‘‘:’’ . strftime(%a %d/%b/%Y hs %H:%M))
call append(3, ‘‘ ’’ . strftime(%a %d/%b/%Y hs %H:%M))
call append(4, # Instituicao: +nome+)
call append(5, # Proposito do script: +descreva+)
call append(6, # Autor: +seuNome+)
call append(7, # site: +seuSite+)
normal gg
endfun
autocmd BufNewFile *.py call BufNewFile_PY()
map ,py :call BufNewFile_PY()crA
Ao editar um arquivo ser´a aberto no ´ultimo ponto em
que foi editado
autocmd BufReadPost *
if line(’‘‘’’‘‘(’’’‘‘’’) = line(‘‘$’’) |
exe ’’normal g‘‘‘ |
endif
Permite recarregar o Vim para que modifica¸c~oes no
Pr´oprio vimrc seja ativadas com o mesmo sendo editado
nmap F12 :C-usource $HOME/.vimrc BAR echo Vimrc recarregado!CR
Redimensionar janelas
Redimensionar a janela com
Alt-seta `a direita e esquerda
map M-right Esc:resize +2 CR
map M-left Esc:resize -2 CR
12.10.8 Fun¸c˜ao para pular para uma linha
ir para linha
ir para uma linha espec´ıfica
function! GoToLine()
let ln = inputdialog(ir para a linha...)
exe ‘‘:’’ . ln
endfunction
no meu caso o mapeamento ´e com Ctrl-l
use o que melhor lhe convier
imap S-l C-o:call GoToLine()CR
nmap S-l :call GoToLine()CR
103. 12.11 Como adicionar o Python ao path do Vim? 93
12.10.9 Fun¸c˜ao para gerar backup
A fun¸c˜ao abaixo ´e ´util para ser usada quando vocˆe vai editar um arquivo gerando
modifica¸c˜oes significativas, assim vocˆe poder´a restaurar o backup se necess´ario
A mapping to make a backup of the current file.
fun! WriteBackup()
let fname = expand(%:p) . __ . strftime(%d-%m-%Y--%H.%M.%S)
silent exe :w . fname
echo Wrote . fname
endfun
nnoremap Leaderba :call WriteBackup()CR
O atalho “leader” em geral ´e a barra invertida “”, na d´uvida “:help
leader”.
12.11 Como adicionar o Python ao path do Vim?
Coloque o seguinte script [14] em:
* ~/.vim/after/ftplugin/python.vim (on Unix systems)
%* $HOME/vimfiles/after/ftplugin/python.vim (on Windows systems)
python EOF
import os
import sys
import vim
for p in sys.path:
# Add each directory in sys.path, if it exists.
if os.path.isdir(p):
# Command ‘set’ needs backslash before each space.
vim.command(r‘‘s’’ % (p.replace(‘‘ ’’, r‘‘ ’’)))
EOF
Isto lhe permite usar ‘gf’ ou Ctrl-w Ctrl-F para abrir um arquivo sob o cursor
12.12 Criando um menu
Como no Vim podemos ter infinitos comandos fica complicado memorizar tudo
´e a´ı que entram os menus, podemos colocar nossos plugins e atalhos favoritos
em um menu veja este exemplo
amenu Ferramentas.ExibirNomeDoTema :echo g:colors_namecr
O comando acima diz:
104. 94 Como Editar Preferˆencias no Vim
amenu ........................ cria um menu
Ferramentas.ExibirNomeDoTema . Menu plugin submenu ExibirNomeDoTema
:echo g:colors_namecr ...... exibe o nome do tema atual
Caso haja espa¸cos no nome a definir vocˆe pode fazer assim
amenu Ferramentas.Exibir nome do tema :echo g:colors_namecr
12.13 Criando menus para um modo espec´ıfico
:menu .... Normal, Visual e Operator-pending
:nmenu ... Modo Normal
:vmenu ... Modo Visual
:omenu ... Operator-pending modo
:menu! ... Insert e Comando
:imenu ... Modo de inser¸c~ao
:cmenu ... Modo de comando
:amenu ... Todos os modos
12.14 Exemplo de menu
cores
menu Temas.cores.quagmire :colo quagmireCR
menu Temas.cores.inkpot :colo inkpotCR
menu Temas.cores.google :colo googleCR
menu Temas.cores.ir_black :colo ir_blackCR
menu Temas.cores.molokai :colo molokaiCR
Fontes
menu Temas.fonte.Inconsolata :set gfn=Inconsolata:h10CR
menu Temas.fonte.Anonymous :set anti gfn=Anonymous:h8CR
menu Temas.fonte.Envy Code :set anti gfn=Envy_Code_R:h10CR
menu Temas.fonte.Monaco :set gfn=monaco:h9CR
menu Temas.fonte.Crisp :set anti gfn=Crisp:h12CR
menu Temas.fonte.Liberation Mono :set gfn=Liberation Mono:h10CR
O comando “:update” Atualiza o menu rec´em modificado. Quando o co-
mando “:amenu” ´E usado sem nenhum argumento o Vim mostra os menus de-
finidos atualmente. Para listar todas as op¸c˜oes de menu para ‘Plugin’ por
exemplo digita-se no modo de comandos “:amenu Plugin”.
Ocultando as barras de ferramentas e menu
:set guioptions-=m ........ oculta menus
:set guioptions-=T ........ oculta icones
obs: para exibir novamente repita o comando
substituindo o sinal de menos por mais.
105. 12.15 Outros mapeamentos 95
12.15 Outros mapeamentos
Destaca espa¸cos e tabula¸c˜oes redundantes:
highlight RedundantWhitespace ctermbg=red guibg=red
match RedundantWhitespace /s+$| +zet/
Explicando com detalhes
s ..... espa¸co
+ ..... uma ou mais vezes
$ ...... no final da linha
| ..... ou
‘‘ ’’ .. espa¸co (veja imagem acima)
+ ..... uma ou mais vezes
ze .... at´e o fim
t ..... tabula¸c~ao
Portanto a express˜ao regular acima localizar´a espa¸cos ou tabula¸c˜oes no final de
linha e destacar´a em vermelho.
Remove espa¸cos redundantes no fim das linhas
map F7 Escmz:%s/s+$//gcr‘z
Um detalhe importante
mz ... marca a posi¸c~ao atual do cursor para retornar no final do comando
‘z ... retorna `a marca criada
Se n˜ao fosse feito isto o cursor iria ficar na linha da ´ultima substitui¸c˜ao!
Abre o vim explorer
map F6 Esc:vne .crbar:vertical resize -30crbar:set nonucr
Podemos usar“Express˜oes Regulares2
”em buscas do Vim veja um exemplo para
retirar todas as tags HTML
mapeamento para retirar tags HTML com Ctrl-Alt-t
nmap C-M-t :%s/[^]*//g cr
Quebra a linha atual no local do cursor com F2
nmap F2 aCREsc
join lines -- Junta as linhas com Shift-F2
nmap S-F2 ADelSpace
Para mais detalhes sobre buscas acesse o cap´ıtulo “6 na p´agina 42”.
2http://guia-er.sourceforge.net
106. 96 Como Editar Preferˆencias no Vim
12.16 Complementa¸c˜ao com “tab”
Word completion
Complementa¸c~ao de palavras
set dictionary+=/usr/dict/words
set complete=.,w,k
------ complementa¸c~ao de palavras ----
usa o tab em modo de inser¸c~ao para completar palavras
function! InsertTabWrapper(direction)
let col = col(‘‘.’’) - 1
if !col || getline(‘‘.’’)[col - 1] !~ ’k’
return ‘‘’’
elseif ‘‘d’’ == a:direction
return ‘‘’’
else
return ‘‘’’
endif
endfunction
inoremap tab c-r=InsertTabWrapper (‘‘d’’)cr
inoremap s-tab c-r=InsertTabWrapper (‘‘d’’)cr
12.17 Abrevia¸c˜oes
Abrevia¸c˜oes habilitam auto-texto para o Vim. O seu funcionamento consiste de
trˆes campos, o primeiro ´e o modo no qual a abrevia¸c˜ao funcionar´a, o segundo
´e a palavra que ir´a disparar a abrevia¸c˜ao e o terceiro campo ´e a abrevia¸c˜ao
propriamente dita. Para que em modo de comando ‘:’ a palavra ‘salvar’ funcione
para salvar os arquivos, adiciona-se a seguinte abrevia¸c˜ao ao ‘~/.vimrc’.
cab salvar wcr
cr corresponde ao Enter
Abaixo abrevia¸c˜oes para o modo de inser¸c˜ao:
iab slas S´ergio Luiz Ara´ujo Silva
iab Linux GNU/Linux
iab linux GNU/Linux
12.18 Evitando arquivos de backup no disco
Nota-se em algumas situa¸c˜oes que existem alguns arquivos com o mesmo nome
dos arquivos que foram editados, por´em com um til (˜) no final. Esses arquivos
107. 12.19 Mantendo apenas um Gvim aberto 97
s˜ao backups que o Vim gera antes de sobrescrever os arquivos, e podem desde
ocupar espa¸co significativo no disco r´ıgido at´e representar falha de seguran¸ca,
como por exemplo arquivos .php~ que n˜ao s˜ao interpretados pelo servidor web
e exp˜oem o c´odigo-fonte.
Para que os backups sejam feitos enquanto os arquivos estejam sendo escritos,
por´em n˜ao mantidos ap´os terminar a escrita, utiliza-se no .vimrc:
set nobackup
set writebackup
Fonte: Site do Eust´aquio Rangel [15].
12.19 Mantendo apenas um Gvim aberto
Essa dica destina-se apenas `a vers˜ao do Vim que roda no ambiente gr´afico,
ou seja, o Gvim, pois ela faz uso de alguns recursos que s´o funcionam nesse
ambiente. A meta ´e criar um comando que vai abrir os arquivos indicados em
abas novas sempre na janela j´a existente.
Para isso deve-se definir um script que esteja no seu path3
do sistema (e que
possa ser executado de alguma forma por programas do tipo launcher no modo
gr´afico) que vai ser utilizado sempre que quisermos abrir nossos arquivos dessa
maneira. Para efeito do exemplo, o nome do arquivo ser´a tvim (de tabbed vim),
por´em pode ser nomeado com o nome que for conveniente.
A ´unica necessidade para essa dica funcionar ´e a vers˜ao do Vim ter suporte para
o argumento -serverlist, o que deve ser garantido nas vers˜oes presentes na
´epoca em que esse documento foi escrito. Para fazer uma simples verifica¸c˜ao se
o comando est´a dispon´ıvel, deve ser digitado em um terminal:
vim --serverlist
gvim --serverlist
Se ambos os comandos acima resultaram em erro, o procedimento n˜ao poder´a
ser implementado. Do contr´ario, deve-se utilizar o comando que teve um retorno
v´alido (vim ou gvim) para criar o script. Supondo que foi o comando gvim que
n˜ao retornou um erro, criamos o script da seguinte forma:
#!/bin/bash
if [ $# -ne 1 ]
then
echo Sem arquivos para editar.
exit
fi
gvim --servername $(gvim --serverlist | head -1) --remote-tab $1
3Diret´orios nos quais o sistema busca pelos comandos
108. 98 Como Editar Preferˆencias no Vim
Desse modo, se for digitado tvim sem qualquer argumento, ´e exibida a mensagem
de erro, do contr´ario, o arquivo ´e aberto na c´opia corrente do Gvim, em uma
nova aba, por exemplo:
tvim .vimrc
Fonte: Site do Eust´aquio Rangel [16]
12.20 Referˆencias
* http://www.dicas-l.com.br/dicas-l/20050118.php
109. Cap´ıtulo 13
Um Wiki para o Vim
´E ineg´avel a facilidade que um Wiki nos traz, os documentos s˜ao indexados e
linkados de forma simples. J´a pesquisei uma por¸c˜ao de Wikis e, para uso pes-
soal recomendo o Potwiki. O “link” do Potwiki ´e este [17]. O Potwiki ´e um
Wiki completo para o Vim, funciona localmente embora possa ser aberto remo-
tamente via ssh1
. Para criar um “link” no Potwiki basta usar WikiNames, s˜ao
nomes iniciados com letra mai´uscula e que contenham outra letra em mai´usculo
no meio.
Ao baixar o arquivo salve em ~/.vim/plugin.
Mais ou menos na linha 53 do Potwiki ~/.vim/plugin/potwiki.vim vocˆe define
onde ele guardar´a os arquivos, no meu caso /home/docs/textos/wiki. a linha
ficou assim:
call s:default(’home’,~/.wiki/HomePage)
Outra forma de indicar a p´agina inicial seria colocar no seu .virmc
let potwiki_home = $HOME/.wiki/HomePage
13.1 Como usar
O Potwiki trabalha com WikiWords, ou seja, palavras iniciadas com letras em
mai´usculo e que tenham outra letra em mai´usculo no meio (sem espa¸cos). Para
iniciar o Potwiki abra o Vim e pressione ww.
Leader ´e igual a - veja :help leader
ww .... abra a sua HomePage
wi .... abre o Wiki index
1Sistema de acesso remoto
110. 100 Um Wiki para o Vim
wf .... segue uma WikiWords (can be used in any buffer!)
we .... edite um arquivo Wiki
.... Fecha o arquivo
CR .... segue WikiWords embaixo do cursor CR ´e igual a Enter
Tab.... move para a pr´oxima WikiWords
BS .... move para os WikiWords anteriores (mesma p´agina)
wr .... recarrega WikiWords
13.2 Salvamento autom´atico para o Wiki
Procure por uma se¸c˜ao autowrite no manual do Potwiki
:help potwiki
O valor que est´a em zero dever´a ficar em 1
call s:default(‘autowrite’,0)
Como eu mantenho o meu Wiki oculto “.wiki” criei um “link” para a pasta
de textos
ln -s ~/.wiki /home/sergio/docs/textos/wiki
Vez por outra entro na pasta ~/docs/textos/wiki e crio um pacote tar.gz e
mando para “web” como forma de manter um “backup”.
13.3 Problemas com codifica¸c˜ao de caracteres
Atualmente uso o Ubuntu em casa e ele j´a usa utf-8. Ao restaurar meu“backup”
do Wiki no Kurumin os caracteres ficaram meio estranhos, da´ı fiz:
baixei o pacote [recode]
# apt-get install recode
para recodificar caracteres de ‘utf-8’ para ‘iso’ fa¸ca:
recode -d u8..l1 arquivo
111. Cap´ıtulo 14
H´abitos para Edi¸c˜ao Efetiva
Um dos grandes problemas relacionados com os softwares ´e sua subutiliza¸c˜ao.
Por in´ercia o usu´ario tende a aprender o m´ınimo para a utiliza¸c˜ao de um pro-
grama e deixa de lado recursos que poderiam lhe ser de grande valia. O mantene-
dor do Vim, Bram Moolenaar1
, recentemente publicou v´ıdeos e manuais sobre
os “7 h´abitos para edi¸c˜ao efetiva de textos”2
, este cap´ıtulo pretende resumir
alguns conceitos mostrados por Bram Moolenaar em seu artigo.
14.1 Mova-se rapidamente no texto
O cap´ıtulo 3, “Movendo-se no Documento”, p´agina 24 mostra uma s´erie de
comandos para agilizar a navega¸c˜ao no texto. Memorizando estes comandos
ganha-se tempo consider´avel, um exemplo simples em que o usu´ario est´a na
linha 345 de um arquivo decide ver o conte´udo da linha 1 e em seguida voltar `a
linha 345:
gg ....... vai para a linha 1
’’ ....... retorna ao ´ultimo ponto em que estava
Fica claro portanto que a navega¸c˜ao r´apida ´e um dos requisitos para edi¸c˜ao
efetiva de documentos.
14.2 Use marcas
veja a se¸c˜ao 3.2 na p´agina 29.
ma ..... em modo normal cria uma marca ‘a’
’a ..... move o cursor at´e a marca ‘a’
d’a .... deleta at´e a marca ‘a’
y’a .... copia at´e a marca ‘a’
1http://www.moolenaar.net
2http://br-linux.org/linux/7-habitos-da-edicao-de-texto-efetiva
112. 102 H´abitos para Edi¸c˜ao Efetiva
gg ... vai para a linha 1 do arquivo
G .... vai para a ´ultima linha do arquivo
0 .... vai para o in´ıcio da linha
$ .... vai para o fim da linha
fx ... pula at´e a pr´oxima ocorr^encia de ‘‘x’’
dfx .. deleta at´e a pr´oxima ocorr^encia de ‘‘x’’
g, ... avan¸ca na lista de altera¸c~oes
g; ... retrocede na lista de altera¸c~oes
p .... cola o que foi deletado/copiado abaixo
P .... cola o que foi deletado/copiado acima
H .... posiciona o cursor no primeiro caractere da tela
M .... posiciona o cursor no meio da tela
L .... posiciona o cursor na ´ultima linha da tela
* ........ localiza a palavra sob o cursor
% ........ localiza fechamentos de chaves, par^enteses etc.
g* ....... localiza palavra parcialmente
’. apostrofo + ponto retorna ao ´ultimo local editado
’’ retorna ao local do ultimo salto
Suponha que vocˆe est´a procurando a palavra ‘argc’:
/argc
Digita ‘n’ para buscar a pr´oxima ocorrˆencia
n
Um jeito mais f´acil seria:
coloque a linha abaixo no seu vimrc
:set hlsearch
Agora use asterisco para destacar todas as ocorrˆencias do padr˜ao desejado e use
a letra ‘n’ para pular entre ocorrˆencias, caso deseje seguir o caminho inverso use
‘N’.
14.3 Use quantificadores
Em modo normal vocˆe pode fazer
10j ..... desce 10 linhas
5dd ..... apaga as pr´oximas 5 linhas
:50 ..... vai para a linha 50
50gg .... vai para a linha 50
113. 14.4 Edite v´arios arquivos de uma s´o vez 103
14.4 Edite v´arios arquivos de uma s´o vez
O Vim pode abrir v´arios arquivos que contenham um determinado padr˜ao. Um
exemplo seria abrir dezenas de arquivos HTML e trocar a ocorrˆencia bgcolor=ffffff
Para bgcolor=eeeeee Usar´ıamos a seguinte sequˆencia de comandos:
vim *.html .............................. abre os arquivos
:bufdo :%s/bgcolor=‘ffffff’/bgcolor=‘eeeeee’/g substitui¸c~ao
:wall .................................... salva todos
:qa[ll] .................................... fecha todos
Ainda com rela¸c˜ao `a edi¸c˜ao de v´arios arquivos poder´ıamos abrir alguns arquivos
txt e mudar de um para o outro assim:
:wn
O ‘w’ significa gravar e o ‘n’ significa next, ou seja, gravar´ıamos o que foi modi-
ficado no arquivo atual e mudar´ıamos para o pr´oximo.
Veja tamb´em “Movendo-se no documento”, cap´ıtulo 3 p´agina 24
14.5 N˜ao digite duas vezes
• O Vim complementa com ‘tab’. Veja mais na se¸c˜ao 12.16 na p´agina 96.
• Use macros. Detalhes na se¸c˜ao 8.3 p´agina 62.
• Use abrevia¸c˜oes coloque abrevia¸c˜oes como abaixo em seu ~/.vimrc. Veja
mais na se¸c˜ao 12.17.
• As abrevia¸c˜oes fazem o mesmo que auto-corre¸c˜ao e auto-texto em outros
editores
iab tambem tamb´em
iab linux GNU/Linux
No modo de inser¸c˜ao vocˆe pode usar:
Ctrl-y ........ copia caractere a caractere a linha acima
Ctrl-e ........ copia caractere a caractere a linha abaixo
Ctrl-x Ctrl-l .. completa linhas inteiras
Para um trecho muito copiado coloque o seu conte´udo em um registrador:
ayy ... copia a linha atual para o registrador ‘a’
ap ... cola o registrador ‘a’
Crie abrevia¸c˜oes para erros comuns no seu arquivo de configura¸c˜ao ( /.vimrc):
114. 104 H´abitos para Edi¸c˜ao Efetiva
iabbrev teh the
syntax keyword WordError teh
As linhas acima criam uma abrevia¸c˜ao para erro de digita¸c˜ao da palavra ‘the’ e
destaca textos que vocˆe abrir que contenham este erro.
14.6 Use dobras
O Vim pode ocultar partes do texto que n˜ao est˜ao sendo utilizadas permitindo
uma melhor visualiza¸c˜ao do conte´udo. Mais detalhes no cap´ıtulo 4 p´agina 30.
14.7 Use autocomandos
:h autocmd.txt
No arquivo de configura¸c˜ao do Vim ~/.vimrc pode-se pode criar comandos
autom´aticos que ser˜ao executados diante de uma determinada circunstˆancia.
O comando abaixo ser´a executado em qualquer arquivo existente, ao abrir o
mesmo, posicionando o cursor no ´ultimo local editado:
autocmd BufEnter * lcd %:p:h
autocmd BufReadPost *
if line(’) 0 line(’) = line($) |
exe normal g‘ |
endif
Grupo de comandos para arquivos do tipo ‘html’. Observe que o autocomando
carrega um arquivo de configura¸c˜ao do Vim exclusivo para o tipo html/htm e
no caso de arquivos novos ‘BufNewFile’ ele j´a cria um esqueleto puxando do
endere¸co indicado:
augroup html
au! -- Remove all html autocommands
au!
au BufNewFile,BufRead *.html,*.shtml,*.htm set ft=html
au BufNewFile,BufRead,BufEnter *.html,*.shtml,*.htm so ~/docs/vim/.vimrc-html
au BufNewFile *.html 0r ~/docs/vim/skel.html
au BufNewFile *.html*.shtml,*.htm /body/+ coloca o cursor ap´os o corpo body
au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent
augroup end
14.8 Use o File Explorer
O Vim pode navegar em pastas assim:
115. 14.9 Torne as boas pr´aticas um h´abito 105
vim .
Vocˆe pode usar ‘j’ e ‘k’ para navegar e Enter para editar o arquivo selecionado:
14.9 Torne as boas pr´aticas um h´abito
Para cada pr´atica produtiva procure adquirir um h´abito e mantenha-se atento
ao que pode ser melhorado. Imagine tarefas complexas, procure um meio melhor
de fazer e torne um h´abito.
14.10 Referˆencias
• http://www.moolenaar.net/habits_2007.pdf por Bram Moolenaar
• http://vim.wikia.com/wiki/Did_you_know
116. Cap´ıtulo 15
Plugins
“Plugins”1
s˜ao um meio de estender as funcionalidades do Vim, h´a“plugins”para
diversas tarefas, desde wikis para o Vim at´e ferramentas de aux´ılio a navega¸c˜ao
em arquivos com ´e o caso do “plugin” NerdTree [18], que divide uma janela que
permite navegar pelos diret´orios do sistema a fim de abrir arquivos a serem
editados.
15.1 Como testar um plugin sem instal´a-lo?
:source path/plugin
Caso o plugin atenda as necessidades, pode-se instal´a-lo. Este procedimento
tamb´em funciona para temas de cor!
No GNU/Linux
~/.vim/plugin/
No Windows
~/vimfiles/plugin/
Obs: Caso ainda n˜ao exista o diret´orio, ele pode ser criado pelo pr´oprio usu´ario
Exemplo no GNU/Linux
+ /home/usuario/
|
|
+ .vim
|
|
+ plugin
1Plugins s˜ao recursos que se adicionam aos programas
117. 15.2 Atualizando a documenta¸c˜ao dos plugins 107
Obs: Alguns plugins dependem da vers˜ao do Vim, para saber qual a que est´a
atualmente instalada:
:ve[rsion]
15.2 Atualizando a documenta¸c˜ao dos plugins
:h helptags
Caso seja adicionado algum arquivo de documenta¸c˜ao em ‘~/.vim/doc’ pode-se
gerar novamente as tags “links” para navega¸c˜ao de ajuda.
:helptags $VIMRUNTIME/doc
:helptags ~/.vim/doc
15.3 Plugin para LATEX
Um plugin completo para LATEXest´a acess´ıvel aqui [19]. Uma vez adicionado o
plugin vocˆe pode inserir seus templates em:
~/.vim/ftplugin/latex-suite/templates
15.4 Criando folders para arquivos LATEX
set foldmarker=begin,end
set foldmethod=marker
Adicionar marcadores (labels) `as se¸c˜oes de um documento LATEX
:.s/^(section)({.*})/12rlabel2
: ........... comando
/ ........... inicia padr~ao de busca
^ ........... come¸co de linha
(palavra) . agrupa um trecho
(section) agrupa ‘section’
.......... torna literal
{ ........... chave literal
.* .......... qualquer caractere em qualquer quantidade
} ........... chave literal
/ ........... finaliza par~ao de busca
1 .......... repeter o grupo 1 (section)
2 .......... repete o grupo 2 ({.*})
r .......... insere quebra de linha
.......... insere uma barra invertida
2 .......... repete o nome da se¸c~ao
118. 108 Plugins
15.5 Criando se¸c˜oes LATEX
o comando abaixo substitui
==se¸c~ao==
por
section{se¸c~ao}
:.s/^==s?([^=]*)s?==/section{1}/g
: ......... comando
. ......... linha atual
s ......... substitua
^ ......... come¸co de linha
== ........ dois sinais de igual
s? ...... seguido ou n~ao de espa¸co
[^=] ...... n~ao pode haver = (^ dentro de [] ´e nega¸c~ao)
* ......... diz que o que vem antes pode vir zero ou mais vezes
s? ...... seguido ou n~ao de espa¸co
........ insere uma barra invertida
1 ........ repete o primeiro trecho entre ()
15.6 Plugin para manipular arquivos
Acesse o plugin neste link [20]. Para entender este plugin acesse um v´ıdeo neste
link [21].
15.7 Complementa¸c˜ao de c´odigos
O “plugin” snippetsEmu ´e um misto entre complementa¸c˜ao de c´odigos e os cha-
mados modelos ou templates. Insere um trecho de c´odigo pronto, mas vai al´em
disso, permitindo saltar para trechos do modelo inserido atrav´es de um atalho
configur´avel de modo a agilizar o trabalho do programador. Link para bai-
xar [22].
15.7.1 Instala¸c˜ao
Um artigo ensinando como instalar o “plugin” snippetsEmu pode ser lido nesse
artigo na internet [23]. Outro plugin muito interessante para complementa¸c˜ao
´e o “autocompletepopup” que complementa mostrando um popup durante a
digita¸c˜ao, o mesmo pode ser obtido neste link [24], em seguida coloca-se esta
linha ao vimrc:
let g:AutoComplPop_CompleteoptPreview = 1
119. 15.8 Um wiki para o Vim 109
A linha acima faz com que o vim abra uma janela pequena com a documenta¸c˜ao
de cada m´etodo que est´a sendo digitado.
15.8 Um wiki para o Vim
O “plugin” wikipot implementa um wiki para o Vim no qual vocˆe define um
“link” com a nota¸c˜ao WikiWord, onde um “link”´e uma palavra que come¸ca com
uma letra mai´uscula e tem outra letra mai´uscula no meio Obtendo o plugin
neste link [17].
15.9 Acessando documenta¸c˜ao do Python no Vim
Obtenha um plugin para esta tarefa em seu site oficial [25].
15.10 Formatando textos planos com syntax
Um plugin que adiciona syntaxe colorida a textos planos pode ser obtido neste
link [26]. Veja como instalar o este plugin no cap´ıtulo 15.8.
15.11 Movimentando em camel case
O plugin CamelCaseMotion [27] auxilia a navega¸c˜ao em palavras em camel
case [28] ou separadas por sublinhados, atrav´es de mapeamentos similares aos
que fazem a movimenta¸c˜ao normal entre strings, e ´e um recurso de grande ajuda
quando o editor ´e utilizado para programa¸c˜ao.
Ap´os instalado o plugin, os seguintes atalhos ficam dispon´ıveis:
,w Movimenta para a pr´oxima posi¸c˜ao camel dentro da string
,b Movimenta para a posi¸c˜ao camel anterior dentro da string
,e Movimenta para o caractere anterior `a pr´oxima posi¸c˜ao camel dentro da
string
Fonte: Blog do Eust´aquio Rangel [29]
15.12 Plugin FuzzyFinder
Este plugin ´e a implementa¸c˜ao de um recurso do editor Texmate2
. Sua proposta
´e acessar de forma r´apida:
1. Arquivos :FuzzyFinderFile
2Editor de textos da Apple com muitos recursos
120. 110 Plugins
2. Arquivos rec´em editados :FuzzyFinderMruFile
3. Comandos rec´em utilizados :FuzzyFinderMruCmd
4. Favoritos :FuzzyFinderAddBookmark, :FuzzyFinderBookmarks
5. Navega¸c˜ao por diret´orios :FuzzyFinderDir
6. Tags :FuzzyFinderTag
Para ver o plugin em a¸c˜ao acesse este video para obte-lo acesse este endere¸co,
para instal´a-lo basta copiar para o diret´orio /.vim/plugin.
15.13 O plugin EasyGrep
Usu´arios de sistemas Unix Like3
, j´a conhecem o poder do comando grep, usando
este comando procuramos palavras dentro de arquivos, este plugin simplifica esta
tarefa, al´em de permitir a utiliza¸c˜ao da vers˜ao do grep nativa do Vim vimgrep,
assim usu´arios do Windows tamb´em podem usar este recurso. Um comando
grep funciona mais ou menos assim:
grep [op¸c~oes] padr~ao /caminho
Mas no caso do plugin EasyGrep fica assim:
:Grep foo ........ procura pela palavra ’foo’
:GrepOptions ...... exibe as op¸c~oes de uso do plugin
O plugin pode ser obtido no seguinte endere¸co, j´a sua instala¸c˜ao ´e simples, basta
copiar o arquivo obtido no link acima para a pasta:
~/.vim/plugin .......... no caso do linux
~/vimfiles/plugin ...... no caso do windows
Um v´ıdeo de exemplo (na verdade uma anima¸c˜ao gif) pode ser visto aqui.
15.14 O plugin SearchComplete
Para que o vim complete op¸c˜oes de busca “com a tecla tab”, digita-se uma
palavra parcialmente e o plugin atua, exibindo palavras que tem o mesmo in´ıcio,
por exemplo:
/mercatab
/mercado
/mercantil
/mercadol´ogico
3Sistemas da fam´ılia Unix tipo o GNU/Linux
121. 15.15 O plugin AutoComplete 111
Cada vez que se pressiona a tecla tab o cursor saltar´a para a pr´oxima ocor-
rˆencia daquele fragmento de palavra. Pode-se obter o plugin SearchComplete
no seguinte endere¸co, e para instal´a-lo basta copi´a-lo para a pasta apropriada:
~/vimfiles/plugin .......... no windows
~/.vim/plugin .............. no Gnu/Linux
H´a outro plugin similar chamado CmdlineComplete dispon´ıvel neste link.
15.15 O plugin AutoComplete
Este plugin trabalha exibindo sugest˜oes no modo de inser¸c˜ao, `a medida que o
usu´ario digita aparece um popup com sugest˜oes para poss´ıveis complementos,
bastando pressionar Enter para aceitar as sugest˜oes. Neste link, vocˆe pode
fazer o download do plugin.
15.16 O plugin Ctags
Ctags em si ´e um programa externo que indexa arquivos de c´odigo fonte. Ele
lˆe o c´odigo fonte em busca de identificadores, declara¸c˜oes de fun¸c˜ao, vari´aveis,
e constr´oi seu ´ındex de referˆencias cruzadas. Mas vamos ao plugin, mesmo por
que n˜ao estamos no CtagsBook.
Primeiro precisamos ter o arquivos de tags. Para tal, usamos o comando:
ctags -R arquivos
Normalmente o parˆametro arquivos pode ser uma express˜ao regular do tipo
*.[ch] e afins. Depois de obter o arquivo de tags, vocˆe j´a pode sair usando os
atalhos do plugin para navegar pelo c´odigo fonte. Com o cursor em cima de um
identificador, usando o atalho ‘ctrl+]’ o cursor pula diretamente para a sua
declara¸c˜ao. O atalho ‘ctrl+o’ volta o cursor para a posi¸c˜ao inicial.
Quando navegando por um c´odigo fonte muito extenso com v´arios diret´o-
rios, ´e mapear o caminho dos arquivos usando o caminho absoluto deles no seu
diret´orio de trabalho deste jeito:
find $(pwd) -regex .*py$ | xargs ctags
Assim vocˆe pode copiar o arquivo de tags para todos os diret´orios e mesmo
assim conseguir usar os atalhos do plugin para navegar no c´odigo fonte.
Pode-se obter o programa Ctags neste link. O plugin de Ctags para o Vim est´a
neste link”, e para instal´a-lo basta copi´a-lo para a pasta apropriada:
~/vimfiles/plugin .......... no windows
~/.vim/plugin .............. no Gnu/Linux
122. 112 Plugins
15.17 O Plugin Project
O plugin project acess´ıvel atrav´es deste link cria toda uma estrutura de geren-
ciamento de projetos, para programadores ´e uma funcionalidade extremamente
necess´aria, costuma-se trabalhar com v´arios arquivos da mesma fam´ılia “exten-
s˜ao”, e ao clicar em um dos arquivos do projeto o mesmo ´e aberto instantanea-
mente.
:Project ......... abre uma janela lateral para o projeto
C ............... inicia a cria¸c~ao de um projeto (recursivamente)
c ............... inicia a cria¸c~ao de um projeto na pasta local
Ap´os digitar o atalho de cria¸c˜ao do projeto aparecer´a uma janela para designar
um nome para o mesmo, em seguida digita-se o caminho para o diret´orio do
projeto, ap´os isto digita-se ‘.’ (ponto) como parˆametro, cria-se um filtro como
‘*.py’. Para criar uma entrada (acesso ao plugin) no menu do Gvim colocamos
a seguinte linha no ‘vimrc’.
amenu Projetos.togle PlugToggleProjectcr
Pode-se definir um projeto manualmente assim:
nome=~/docs/ CD=. filter=*.txt {
}
Ao recarregar o Vim pode-se abrir o Plugin“:Projetc”e pressionar o atalho ‘r’
para que o mesmo gere um ´ındice dos arquivos contidos no caminho indicado.
15.18 O plugin pydiction
Um que completa c´odigos python assim:
import sys
sys.tab
O plugin cont´em dois arquivos:
1. pydiction.py deve ser colocado no path
2. pydiction deve ser colocado em um lugar de sua preferˆencia
Deve-se adicionar algumas linhas do .vimrc. No exemplo abaixo o dicion´ario ´e
adicionado ao diret´orio /.vim/dict
if has(autocmd)
autocmd FileType python set complete+=k/.vim/dict/pydiction isk+=.,(
endif has(autocmd)
Pode-se obter o plugin neste link.
123. 15.19 O plugin FindMate 113
15.19 O plugin FindMate
Um plugin que agiliza a busca por arquivos na pasta pessoal, dispon´ıvel neste
link. Basta coloca-lo na pasta “/home/usuario/.vim/plugins/” e digitar duas
vezes v´ırgula e ele substituir´a para:
:FindMate
Digita-se ent˜ao uma palavra e Enter para se obter a lista de arquivos que
correspondem ao padr˜ao.
15.20 Atualizando a documenta¸c˜ao dos plugins
:h helptags
Caso seja adicionado algum arquivo de documenta¸c˜ao em em ‘~/.vim/doc’
pode-se gerar novamente as tags “links” para navega¸c˜ao de ajuda.
:helptags ~/.vim/doc
125. Bibliografia
[1] UNKNOWN, “PC: MS-DOS and MS-Windows”, 2009, acessado
19/05/2009, http://www.vim.org/download.php.
[2] SILVA, S. L. A., “Using expression register in Vim”, 2009, acessado
14/05/2009, http://vimeo.com/2967392.
[3] JARGAS, A. M., Express˜oes Regulares - Guia de Consulta R´apida. 2001,
acessado em 14/05/2009, http://guia-er.sourceforge.net/.
[4] ANGELO, O. H. E., “Mudan¸ca em v´arias linhas”, 2007, aces-
sado em 14/05/2009, http://tech.groups.yahoo.com/group/vi-br/
message/853.
[5] CHARLES CAMPBELL, “Produce increasing/decreasing columns of num-
bers, dates, or daynames”, 2006, Acessado no dia 19 de agosto de 2009,
http://vim.sourceforge.net/scripts/script.php?script_id=670.
[6] ALMEIDA, R. Q. D., “Jun¸c˜ao de linhas com vim”, 2008, acessado em
14/05/2009, http://www.dicas-l.com.br/dicas-l/20081228.php.
[7] LAKSHMANAN, Y., “Vim documentation: vim faq”, 2005, acessado
17/05/2009, http://vimdoc.sourceforge.net/htmldoc/vimfaq.html.
[8] WIKIPEDIA, “Acordo Ortogr´afico de 1990”, 2009, acessado em
21/07/2009, http://pt.wikipedia.org/wiki/Acordo_Ortogr%C3%
A1fico_de_1990.
[9] MOURA, R. S., “Dicion´arios do Broffice.org”, 2009, acessado 14/05/2009,
http://www.broffice.org/verortografico/baixar.
[10] ANONYMOUS, “Scientific calculator”, 2006, acessado 14/05/2009, http:
//vim.wikia.com/wiki/Scientific_calculator.
[11] BOUNGA, “Writing a valid statusline”, 2004, acessado 14/05/2009, http:
//vim.wikia.com/wiki/Writing_a_valid_statusline.
[12] MEDLEY, B., “Number a group of lines”, 2001, acessado 14/05/2009,
http://vim.wikia.com/wiki/Number_a_group_of_lines.
[13] UNKNOWN, “Gvim colorscheme screenshot”, 2009, acessado 14/05/2009,
http://nanasi.jp/old/colorscheme_0.html.
126. 116 Referˆencias Bibliogr´aficas
[14] LEGNER, “Automatically add Python paths to Vim path”, 2008, aces-
sado em 14/05/2009, http://vim.wikia.com/wiki/Automatically_add_
Python_paths_to_Vim_path.
[15] RANGEL, E., “Backups do Vim”, 2008, acessado 14/05/2009, http://
eustaquiorangel.com/posts/520.
[16] RANGEL, E., “Instˆancia solit´aria do Vim”, 2007, acessado 14/05/2009,
http://eustaquiorangel.com/posts/477.
[17] STEINER, E., “potwiki.vim : Maintain a Wiki of plain text files”,
2008, acessado 14/05/2009, http://www.vim.org/scripts/script.php?
script_id=1018.
[18] GRENFELL, M., “The NERD tree : A tree explorer plugin for naviga-
ting the filesystem”, 2009, acessado 14/05/2009, http://www.vim.org/
scripts/script.php?script_id=1658.
[19] UNKNOWN, “Plugin para latex”, acessado 14/05/2009, http://
vim-latex.sourceforge.net/.
[20] NATSUNO, K., “ku : An interface for anything”, 2009, aces-
sado 14/05/2009, http://www.vim.org/scripts/script.php?script_
id=2337#0.1.9.
[21] UNKNOWN, “Video about ku file”, 2009, acessado 14/05/2009,
http://www.screencast.com/users/kana/folders/Jing/media/
278e3c04-864f-4dcb-bb7e-8db0fdd2e383.
[22] INGRAM, F., “snippetsEmu : An attempt to emulate TextMate’s snippet
expansion”, 2008, acessado 14/05/2009, http://www.vim.org/scripts/
script.php?script_id=1318.
[23] SILVA, S. L. A., “Instalando o plugin snippetsEmu no vim”,
2008, acesso em 13/05/2009, http://vivaotux.blogspot.com/2008/03/
instalando-o-plugin-snippetsemu-no-vim.html.
[24] NISHIDA, T., “Plugin para complementa¸c˜ao autom´atica com popup”,
2009, acesso em 14/05/2009, http://www.vim.org/scripts/script.php?
script_id=1879.
[25] KELPE, A., “pydoc.vim : Python documentation view- and search-tool
(uses pydoc)”, 2005, acessado 14/05/2009, http://www.vim.org/scripts/
script.php?script_id=910.
[26] STAHLMAN, B., “Txtfmt (The Vim Highlighter) : Highlight plain
text in Vim! (Beautify your documents with colors and formats.)”,
2009, acessado 14/05/2009, http://www.vim.org/scripts/script.php?
script_id=2208rating=helpful#1.3.
[27] KARKAT, I., “camelcasemotion : Motion through CamelCaseWords and
underscore notation.” 2009, acessado em 14/05/2009, http://www.vim.
org/scripts/script.php?script_id=1905.
127. Referˆencias Bibliogr´aficas 117
[28] WIKIPEDIA, A. E. L., “CamelCase”, 2009, acessado 14/05/2009, http:
//en.wikipedia.org/wiki/Camel_case.
[29] RANGEL, E.,“Plugin do Vim para altos, baixos e rasteiros”, 2008, acessado
14/05/2009, http://eustaquiorangel.com/posts/522.