sábado, 31 de janeiro de 2009

Definindo o local aonde uma nova janela deve ficar no vim

Quando um comando cria uma janela pode-se prefixa-lo com o local da nova janela:
:leftabove cmd
:aboveleft cmd
a esquerda ou acima da janela corrente.

:rightbelow cmd
:belowright cmd
a direita ou abaixo da janela corrente.

:topleft cmd
no topo ou na extremidade esquerda da tela

:botright cmd
no rodapé ou na extremidade direita da tela.

Exemplo:
:rightbelow split

Opção para definir o local default de uma nova janela no vim

Para que uma nova janela horizontal apareça abaixo da janela corrente use:
:set splitbelow

Para que uma nova janela vertical apareça a direita da janela corrente use:
:set splitright

Comandos de edição que também dividem a janela no vim

Muitos comandos de edição tem uma variante que também divide a tela.

Para comandos de linha de comando, prefixe-os com "s". Por exemplo:
:stag
divide a janela (split) e salta para a tag.

Para comandos em modo normal, prefixe um <ctrl->w, por exemplo:
<ctrl>w<ctrl>~
irá dividir a janela e editar o arquivo alternado.

Removendo as diferenças do diff do vim

Formas de remover diferenças mostradas nas janelas diff.

Copiando texto de uma janela para a outra:

Posicione o cursor num bloco colorido
Use:
dp
o texto foi enviado para outra janela (diff put).

Posicione o cursor aonde falta uma alteação:
use:
do
o texto é recebido na janela corrente (diff obtain).

Quando há eliminação de diferenças, o vim põe o texto dentro de folds fechados.

Atualizando as janelas do diff após mudanças no vim

Se fizer mudanças nas janelas do diff, o vim não atualizará. Use esse comando:
:diffupdate

Saltando para as diferenças do vimdiff do vim

Para ir para a próxima diferença:
]c

Para retornar para uma diferença:
[c

Parando a rolagem simultânea do vimdiff no vim

Ao se comparar arquivos no vim, ele tentará manter as janelas na mesma posição.
Se quiser desabilitar temporariamente isso use:
:set noscrollbind

sexta-feira, 30 de janeiro de 2009

Comparando um arquivo original e o arquivo com patch no vim

De posse de um arquivo patch ou diff, edite o arquivo em que eles aplicam:
:e a.txt

Compare passando o patch:
:vertical diffpatch a.txt.diff

O arquivo deve conter somente um patch para o arquivo no buffer.

Comparando arquivos dentro do vim

Edite um arquivo:
:e main.c

Faça uma janela vertical mostrando as diferenças:
:vertical diffsplit main.c~

quinta-feira, 29 de janeiro de 2009

Comparando arquivos a partir do shell no vim

Para comparar arquivos no vim use no shell:
gvimdiff a.txt b.txt

O vim mostrará 2 janelas lado a lado.
Aparecerão as linhas diferentes com alguns linhas acima e abaixo.

As linhas não alteradas serão compactadas em uma linha (fold fechado).

A linha inserida aparece em um cor e a alterada em outra.
A linha deletada aparece com '---'.

Mostrando em que posição está o cursor no vim

Para obter informações sobre a posição do cursor dentro do buffer corrente use:
<Ctrl-G>
Ele mostrará:
O nome do arquivo como foi digitado, status do buffer, qual a linha corrente e o total de linhas,
a porcentagem do arquivo em que o cursor está e qual coluna o cursor está.
g<Ctrl-G>
além disso mostra a posição do cursor em termos de coluna, linha,
palavra, byte e carácter.
Se anexar uma contagem ao comando ele mostra informa adicional:
1<Ctrl-G>
além disso, mostra o path completo.
2<Ctrl-G>
além disso, mostra o número do buffer.

Abrindo uma janela para cada arquivo no vim

Para abrir janelas horizontais digite no shell:
vim -o a.txt b.txt c.txt
Para janelas verticais
vim -o a.txt b.txt c.txt

Se voce abriu os arquivos com:
gvim a.txt b.txt c.txt
use :
:all
para abri-los em janelas horizontais
:vertical all
Para abrir uma janela para cada buffer oculto:
:unhide
:unh
Abrindo uma janela para cada buffer
:ball

quarta-feira, 28 de janeiro de 2009

Fechando janelas

Para fechar a janela corrente use:
:close
<Ctrl-W>c
Para fechar todas as janelas exceto a janela corrente use:
:only
<Ctrl-W>o
Para fechar todas as janelas e sair do vim:
:qa
Para fechar todas as janelas, descartar mudanças e sair do vim:
:qa!
Para fechar todas janelas, salvar todas alterações e sair do vim:
:wqa
Se as janelas que forem fechadas tiverem alterações não-salvas o vim dará um erro.

Os comandos:
:q
<Ctrl-W>q
:ZZ
também o fazem porém também saem do vim quando é fechada a última janela.

Movendo janelas

Para mover a janela para o topo:
<Ctrl-W>K
Para mover a janela para o rodapé:
<Ctrl-W>J
Para mover a janela para a extremidade esquerda:
<Ctrl-W>H
Para mover a janela para a extremidade direita:
<Ctrl-W>L
Esses comandos podem ser usados também para mudar o layout das janelas.
Para girar para baixo uma janela:
<Ctrl-W>r
Para girar para cima uma janela:
<Ctrl-W>R
Para trocar a janela corrente com a seguinte:
<Ctrl-W>x

Opção para deixar todas janelas no mesmo tamanho no vim

Para fazer com que todas janelas fiquem do mesmo tamanho quando se fecha ou abre uma janela use a opção:
:set equalalways

Saltando entre janelas

Para ir para a janela abaixo, a janela acima ou janela com o número use:
<Ctrl-W>w
<Ctrl-W>W
2<Ctrl-W>w
Para a janela a esquerda, abaixo, acima, direita:
<Ctrl-W>h
<Ctrl-W>j
<Ctrl-W>k
<Ctrl-W>l
Para a janela do topo e para o rodapé:
<Ctrl-W>t
<Ctrl-W>b

Definindo o tamanho das janelas

Para definir o tamanho de uma nova janela use:
3split a.txt
cria uma janela de 3 linhas.

Para redimensionar as janelas, é mais fácil usar o mouse e arrastar os separadores.

Para aumentar 1 linha uma janela existente:
<Ctrl-W>+
Para diminuir 1 linha uma janela existente:
<Ctrl-W>-
Esses dois comandos podem receber um contador de linhas:
3<Ctrl-W>+
aumenta 3 linhas.

Para definir o tamanho específico da janela use:
8<Ctrl-W>_
define uma janela com 8 linhas.

Para aumenta a janela o máximo possível use:
<Ctrl-W>_
Para fazer todas janelas com o mesmo tamanho:
<Ctrl-W>=
Embora o vim possa fazer várias coisas rapidamente só com teclado, redimensionar janelas é mais ágil com o mouse.

Dividindo janelas

Janelas são divisões da tela do Vim.
Use o comando para cria-las:
:{contagem}split {+comando}{arquivo}
Dividir a tela horizontalmente em duas janelas:
:split
Desse jeito pode-se ver partes diferentes de um mesmo arquivo.

Para abrir uma janela horizontal com outro arquivo use:
:split b.txt
Para abrir uma janela vertical use:
:vsplit
:vsplit b.txt
Para abrir uma janela horizontal vazia:
:new
Para abrir uma janela vertical vazia:
:vnew
Para abrir uma janela e executar um comando:
:split +/print a.txt
Para abrir um janela com um número de linhas:
:3split a.txt

Mudando o nome do arquivo sem gravar no vim

Se voce abriu um arquivo e quer mudar o nome, mas não quer salva-lo agora use:
:file b.txt

Se quiser salva-lo voce deve usar:
:w
no final das alterações.

Salvando um arquivo com outro nome no vim

Edite o arquivo original:
:e a.txt

Salve com outro nome
:saveas b.txt

Agora, tem-se os 2 arquivos, mas quem está sendo editado é b.txt.

Visualizando um arquivo no modo read-only no vim

Se quiser visualizar um arquivo modo só-leitura use o argumento de linha de comando:
vim -R arquivo
No unix use também:
view arquivo
O arquivo é aberto em modo read-only.
Desta forma, se voce editar o arquivo e tentar grava-lo:
:w
o vim dará um aviso.
No entanto o buffer é alterado. Isso é útil pois formata o arquivo para vê-lo melhor .

Se quiser forçar a gravação use:
:w!
Se quiser evitar qualquer alteração do buffer depois que o arquivo foi lido use:
vim -M arquivo
se tentar algum comando que altere o buffer ele falhará e o vim dará um erro.

No entanto isso ainda pode ser mudado pelo usuário se ele usar:
:set modifiable
:set write
para remover a proteção.

Adicionando linhas no final de um arquivo no vim

Se quiser acrescentar todas linhas do buffer no final em um arquivo existente use:
:w >> a.txt

Adicionando um grupo de linhas use:
V
jjj
:w >> a.txt

Esse processo é mais ágil que o "edita-copia-edita-cola" porém só faz adições no final do arquivo.

Movendo trechos de texto entre arquivos

Use registradores e comando de deleção.
Delete uma palavra e coloque-a no registrador 'w'.
"wdaw
Copie para outro arquivo na mesma sessão Vim:
"wp

Copiando texto entre arquivos usando registradores

Se for copiar vários trechos de texto de um arquivo para outro, a sequencia "editar arquivo - copiar um trecho - editar outro arquivo - colar o trecho" se torna cansativa.

Para evitar isso copie cada trecho para um registrador do vim.
Um registrador é um local aonde o vim armazena textos e serão usados os registradores de a até z.

Faça cópias de trechos do texto e salve-os para diferentes registradores.
Para o registrador f - copie (yank) a sentença
"f
yas
Para o registrador l - copie 3 linhas:
"l
3Y
Faz uma seleção visual de bloco - para o registrador b - copie a seleção.
Agora temos 3 trechos de texto em 3 registradores do vim.
<Ctrl-V>jjww
"by
Abra outro arquivo, posicione o cursor e cole cada um:
"fp
"lp
"bp

Copiando texto entre arquivos

Para copiar um bloco de texto entre arquivos existem vários métodos.

Método usando marca.
Abra uma outra janela editando o segundo arquivo:
:split segundo_arquivo
Vá para a janela anterior:
<Ctrl-W>p
Vá para a primeira linha do bloco a ser copia e marque-o:
ma
Vá para a última linha do bloco.
Faça uma cópia da linha corrente até a marca para o registrador default:
y'a
Vá para a janela do destino do texto:
<Ctrl-W>p
Vá para a linha depois de aonde ficará o bloco.
Cole:
P

Método usando seleção visual.
Abra uma outra janela editando o segundo arquivo:
:split segundo_arquivo
Vá para a janela anterior:
<Ctrl-W>p
Vá para o início do bloco a ser copiado.
Entre em modo visual:
V
Mova o cursor até o final do bloco. O texto selecionado será destacado
visualmente:
4j
Copie a seleção para o registrador default:
y
Vá para a janela do destino do texto:
<Ctrl-W>p
Cole:
P

Método dois programas Vim diferentes:
Edite o primeiro arquivo.
Inicie outro instância do Vim para editar o segundo arquivo.
Vá para a janela com o primeiro arquivo.
Vá até o início do texto a ser copiado.
Entre no modo visual:
V
Vá até o final da seleção. Ela será destacada.
Copie a seleção para o registrador Clipboard do sistema:
"*y
Mude para a outra instância do Vim com o arquivo destino.
Vá para a linha abaixo de onde será inserido o texto.
Cole:
"*P
Esse método também se aplica a outras aplicações que não sejam o Vim.

terça-feira, 27 de janeiro de 2009

Opção para fazer backup do arquivo original e mante-lo intacto

Se voce editar um arquivo, a opção:
:set backup
só salva a última versão antes da gravação. Isso é útil se você está alterando fontes de uma distribuição e quer manter o original.

Para manter a versão mais antiga de um arquivo ou a versão original antes da 1ª gravação use:
:set patchmode=.orig
Se o arquivo com prefixo do 'patchmode' não existe, o vim salva o arquivo original com a extensão .orig.

A opção:
:set backupdir
não deve estar vazia.
Após isso, o arquivo original é mantido e os backups criados terão o sufixo ~ (ou o que foi declarado em backext).

Opção para criar o backup do arquivo antes da gravação

Para criar o backup do arquivo antes de gravar um arquivo ligue a opção:
:set backup
O nome do arquivo de backup será o nome original seguido de um ~.
Se quiser mudar o padrão de nome use:
:set backupext=.bak
Por default, os backups vão para o mesmo diretório do arquivo original.
Para definir diretórios de backup use:
:set backupdir=diretório
Diretório começando com:
./
significa por o backup em um diretório relativo ao arquivo original.

Diretório de backup oculto em unix:
set backupdir=./.backup
o diretório .backup deve ser criado em cada diretório.

A forma:
:set backupdir+=
:set backupdir-=
é a recomendada para adicionar/remover diretórios da lista, pois evita problemas com defaults de futuras versões.
Por default, a opção 'writebackup' está ligada. Ela faz que seja criado um
backup antes de gravar um arquivo. O backup é removido o arquivo foi gravado com
sucesso (a menos que 'backup' esteja ligado).

Nota: Se você fizer:
:set nobackup
:set nowritebackup
O Vim simplesmente regrava sobre o arquivo existente. Isto pode causar perda de
dados caso haja problemas com o disco durante a atualização.

Saltando para as posições anteriores do cursor

O Vim mantém uma lista com as posições de linha/colunha cursor antes de um salto. É conhecida como 'jump list'.
Para ir saltando em direção às posições mais antigas na jump list:
<Ctrl-O>
Para ir saltando em direção às posições mais recentes na jump list:
<Ctrl-I>

segunda-feira, 26 de janeiro de 2009

Usando uma marca global para saltar entre arquivos

Essas marcas são globais, ou seja, elas podem saltar entre arquivos.
Elas tem nome de uma letra maiúscula.

Use para criar uma marca:
mF
Para voltar para lá, mesmo editando outro arquivo use:
'F
Essa marca permanece até ela ser usada.
Associe a letra com o tipo do local:
H para header, C para código C, M para Makefile etc.
Use:
:marks H
para ver aonde uma marca aponta.

Lembre que:
<ctrl-o> e <ctrl-i>
saltam para posições mais antigas e mais novas sem usar marcas.

Marca da posição da última mudança no arquivo

Use:
`.

Marca da posição do arquivo quando saiu da edição

Use:
`"

Saltando rapidamente entre dois arquivos no vim

Se abriu vários arquivos alterne entre dois com:
<ctrl-^>
mas em teclados não-americanos como ABNT use:
<ctrl-6>

Opção para gravar automaticamente quando um buffer é abandonado no vim

Se você tem mudanças que não foram salvas e tenta editar outro arquivo ou sair
do vim (:e, :n, :q) o vim dará um erro.

Uma saída é fazer o vim gravar automaticamente o buffer sempre com :
:set autowriteall
:set autowrite
Obs: não é recomendado isso, pois pode gravar alterações que não eram desejadas. O default é não gravar.

Editando vários arquivos

Existem várias formas para abrir uma lista de arquivos no vim.
No terminal:
gvim *.txt
No vim:
:next *.txt
No vim:
:args *.txt
O arquivo corrente estará entre colchetes,'[]'.
Após o comando o vim abre com o 1º arquivo da lista para editar.
Para passar para o arquivo seguinte use:
:n
Caso o buffer corrente tenha alterações não salvas e você pode descarta-lo e
passar para o arquivo seguinte:
:n!
Caso queira salvar o buffer e depois abrir o próximo arquivo use:
:wn
que é igual a:
:w
:n
Para voltar no arquivo seguinte:
:prev
:wprev
Para voltar para o primeiro e último arquivo:
:first
:last
Saltando vários arquivos na lista, use um contador:
:2next
:3previous
Para ir para um arquivo específico da lista:
:arguments 2
Para listar os arquivos abertos use:
:args

Editando um arquivo

No terminal:
gvim a.txt
Dentro do vim:
:e b.txt
o vim irá fechar o buffer corrente e abrirá b.txt.
Se o buffer corrente tem alterações que não foram salvas, o vim voltará o erro E37.
Você pode salvar o buffer:
:w
Ou descartar as mudanças, e abrir o outro arquivo:
:e! b.txt
O comando seguinte oculta o buffer com alterações e permite a abertura de outro arquivo:
:hide e b.txt
para ocultar o buffer corrente e editar o novo arquivo. O buffer oculto ainda estará lá e no final poderá ser salvo (ou não).

Uma opção melhor é usar opção:
:set hidden
que oculta automaticamente o buffer com alterações, permitindo abrir um novo arquivo.
No final da sessão do Vim, será perguntando se quer salvar ou não.

domingo, 25 de janeiro de 2009

Imprimindo colorido um arquivo aberto no vim

Para imprimir o arquivo aberto no vim nas cores em que aparece na tela use:
:hardcopy
Para imprimir parte do arquivo use o visual mode:
v 100j
:hardcopy
entra em visual mode - seleciona 100 linhas abaixo - imprime.

Desativando a colorização de sintaxe no vim

Para parar temporiamente (só ocorre no arquivo sendo editado) use:
:syntax clear

Para parar permanentemente use:
:syntax off

Para ativar somente manualmente:
:syntax manual
e ative a sintaxe com:
:set syntax=ON

Testando as cores do Vim

Para saber que combinações de cores se apresenta bem, rode o script :
:runtime syntax/colortest.vim

Criando um esquema de cores personalizado no vim

Descubra um esquema de cores próximo ao que você deseja.

Nesse diretório tem alguns: $VIMRUNTIME/colors.
Aqui no site do vim, tem vários esquemas para baixar.
E aqui tem previews de vários deles para ver diretamente no browser.

Copie para seu diretório local :
~/.vim/colors.
Edite o arquivo de esquema de cores. Aqui estão alguns argumentos do comando highlight mais comuns:
term - atributos em um terminal branco e preto.
cterm - atributos em um terminal colorido.
ctermfg - cor de frente em um terminal colorido.
ctermbg - cor de trás em um terminal colorido.
gui - atributos na interface gráfica.
guifg - cor de frente na interface gráfica.
guibg - cor de fundo na interface gráfica.
Fazendo os comentários aparecerem em verde:
highlight Comment ctermfg=green guifg=green
Para saber quais atributos podem ser usados veja o help do comando:
help :highlight
Use o novo esquema de cores:
:colorscheme nome-do-esquema

Redesenhando a tela do vim

Para redesenhar a tela use o comando:
<Ctrl-L>
Isso se mostra útil quando usando um terminal e mensagens do sistema bagunçaram a tela. No GUI isso não é problema.

Retornando as cores default do vim

Se estiver experimentando a colorização no vim, pode-se voltar à colorização default com:
:set syntax reset

Ajustando a cor de fundo para visualizar melhor no vim

O vim tenta adivinhar qual cor de texto é a melhor baseado na cor de fundo.Caso a cor escolhida não seja visível use:
set background=dark
ou
set background=light
para ajudar o vim a escolher a cor adequada do texto.

Coloque no vimrc antes de :
:set syntax enable
para que o vim possa sobrepor a cor.

Ou, se quiser testar, apos mudar o background use:
:syntax reset

Informando o tipo do arquivo para o vim

Se o arquivo o vim não reconhece o tipo do arquivo (quando não tem nome ou com sufixo não padrão) use:
:set filetype=html
para informar ao vim qual o tipo do arquivo.

Usando modeline para definir a sintaxe de um arquivo no vim

Use um modeline para que o vim reconheça o tipo de arquivo quando ele for aberto:
# vim: syntax=make

Útil quando o arquivo não é reconhecido automaticamente pelo vim

Opção para ativar a colorização de sintaxe

Para colorir a sintaxe dos arquivos no vim use o comando:
:set syntax enable
O vim, baseado no tipo do arquivo, irá carregar um dos arquivos de sintaxe do diretório $VIMRUNTIME/syntax para colorir o arquivo.
Coloque-o no vimrc. (recomendado)

Se não aparecer cores no terminal:
- verifique a variável $TERM. O valor deveria ser xterm para o Linux.
- verifique se o tipo de arquivo é reconhecível pelo vim:
Para ver quais tipos de arquivos o vim reconhece use veja o diretório $VIMRUNTIME/syntax.