sábado, 21 de fevereiro de 2009

Listando as abreviações existentes no vim

Use:
:abbreviate
Sai uma lista.
Modo que se aplica a abreviação
c - linha de comando
i - modo inserção
! - ambos

Criando abreviações

Uma abreviação é uma palavra curta que expande para uma palavra longa durante a inserção.
O comando:
:abbreviate 
funciona tanto no modo inserção como na linha de comando.

Em modo normal:i@a insere 'fresh'.
Em modo comando: :s/xx/@a/ executa :s/xx/fresh/

Para definir abreviações só para o modo inserção use:
:iabbreviation
ou:
:iab
Abreviação de uma palavra:
:iab par paralelepípedo
Use:
Entrar no modo inserção.
par<space>
A abreviação é disparada por um carácter que não pode ser parte de uma palavra, por exemplo, espaço.
Para evitar que uma abreviação expanda (pois será usada como palavra) pressione :
<Ctrl-V><space>
Abreviação de mais de uma palavra.
:iab BO Barak Obama
Abreviação para caixas de comentários:
:iab #b /******************************************************************
:iab #e
<space>******************************************************************/
como espaços entre a abreviação e a expansão são ignorados, foi usado <space>.

Abreviação para corrigir erros frequentes de digitação:
:iab proque porque

Para abreviações somente em modo comando:
:cabbreviate
Para evitar remapeamento de abreviações:
:cnoreabbrev

Copiando texto no modo inserção

No modo inserção, para copiar o texto da linha acima do cursor:
<Ctrl-Y>
a cada vez que pressionar essas teclas, o vim copia o caractere acima do cursor.

O comando
<Ctrl-E>
age igual exceto que copia da linha abaixo do cursor.

Preparando para usar o omni-completion do vim

Habilite plugins de filetype:
filetype plugin on
filetype plugin indent on

Para o código C é preciso criar o tags file e definir a opção 'tags'

Autocompletando código de programa usando omni-completion do vim

Com omni-completion pode-se completar código-fonte de maneira inteligente.
Use:
<ctrl-x><ctrl-o>
para completar.

O vim inspeciona o texto antes do cursor e filtra somente as palavras que fariam sentido. É diferente de <ctrl-p> que completaria com qualquer palavra.

Autocompletando vários tipos de textos

Você pode selecionar o tipo de texto que você deseja completar.
Digite o início do texto e pressione uma dessas sequencias de teclas.

Nomes de arquivo:
<Ctrl-X><Ctrl-F>
Linhas inteiras:
<Ctrl-X><Ctrl-L>
Definições de macro (arquivo incluídos):
<Ctrl-X><Ctrl-D>
Arquivo atual e incluídos
<Ctrl-X><Ctrl-I>
Palavras de um dicionário:
<Ctrl-X><Ctrl-K>
Sinônimos (thesaurus):
<Ctrl-X><Ctrl-T>
Tags:
<Ctrl-X><Ctrl-F>
Linha de comando:
<Ctrl-X><Ctrl-F>

Depois de cada um deles <Ctrl-N> e <Ctrl-P> pode ser usado para navegar pelos
demais itens.

Opção para usar o case em que está digitando o texto

Use:
:set infercase
com o 'ignorecase' ligado, o auto-completar ignora o case no momento de procurar a palavra, mas completa a palavra com o case em que se está digitando o texto.

Opção para definir aonde buscar palavras para autocompletar

A opção:
:set complete
define os locais de procura por palavras.

O default é
'.,w,b,u,t,i'
Significa :
Procura no buffer corrente,nos buffers de outras janelas, outros buffers
carregados, buffers descarregados, nas tags, nos arquivos incluídos com
#include.

Locais aonde o vim busca palavras para autocompletar

O vim busca palavras para completar nos seguintes locais:
1. Arquivo corrente.
2. Arquivos em outras janelas.
3. Outros arquivos carregados (buffers ocultos)
4. Arquivos de tag.
5. Todos arquivos que foram incluídos pelo arquivo corrente com #include.

Auto-completando palavras no modo inserção do vim

Digite o início da palavra e pressione:
<ctrl-p>

O vim busca uma palavra que comece com os caracteres na frente do cursor.
Pressionando <ctrl-n> traz uma novo match.

Para pesquisar para frente use:
<ctrl-p>

Opção para mostrar o delimitador correspondente

Use:
:set showmatch
para que o vim destaque brevemente o separador correspondente se o cursor estiver num [,],(,),{,}.

Para alterar o tempo que o vim fica mostrando o separador correspondente use:
:set matchtime=15
tempo em décimos de segundo.

Usando os registradores numéricos

Os registradores 0-9 são usados pelo vim para salvar todo texto que for copiado ou deletado.
O registrador 0 contém o texto que foi copiado mais recentemente. Exceto se foi usado outro registrador.

O registrador 1 contém o texto que foi deletado (por comando deleção ou alteração) mais recentemente. Exceto se usou outro registrador.

A cada deleção, os conteúdos anteriores são deslocados para os registradores 2 até 9.

Para usa-los prefixe um comando com:
"0

Inserindo o conteúdo de um registrador (incluindo registrador clipboard) no modo inserção

Entre no modo inserção.
<Ctrl-R>
O Vim insere um ' " ' para dizer que espera um registrador.
Se quiser o conteúdo do registrador-clipboard:
+
Isso vale para registradores 0-9, a-z,*,+, etc.
Inserindo um nome de função longo.
Copie o nome:
"vyiw
isso quer dizer - no registrador v, copie (yank) uma palavra interna.
Insira a palavra no modo inserção:
<Ctrl-R>
"v

Note que se o conteúdo do registrador contiver caracteres especiais como
<BS> eles serão interpretados como se tivessem sido digitados no teclado.
Para evitar isso (você realmente quer inserir o caractere <BS> e não
deletar um caractere) use:
 <Ctrl-R><Ctrl-R> registrador

Inserindo dígrafos do vim

Dígrafos são pares de caracteres usados para gerar caracteres que não possuem
correspondentes no teclado.

<ctrl-k>Co
É inserido:
©
Sempre use a tabela de dígrafos para ver quais são, pois variam de sistema.

Repetindo a última inserção

Inserindo o último texto que foi inserido.

Entre no modo inserção (i,a,o, etc).
Insira o texto anterior e fique em modo inserção:
<Ctrl-a>
Ou insira o texto anterior e saia do modo inserção:
<Ctrl-@>

Alterando texto no modo inserção do vim

Para alterar uma letra no meio da linha.
Saia do modo inserção:
<esc>
Retorne saltando palavras:
4b
Posicione o cursor:
l
Mude a letra:
ra
Volte para o modo inserção no final da linha:
A

Sem sair do modo inserção usando teclas de controle:
<ctrl-left>
menos ágil que o método acima.

Deletando texto no modo inserção do vim

Para deletar caracteres:
<Del>
<BS>
Para deletar uma palavra antes do cursor:
<Ctrl-W>
Para deletar a linha inteira ou a parte que foi inserida:
<Ctrl-U>

Editando arquivos compactados no vim

O plugin gzip descompacta o arquivo para ele possa ser editado normalmente.
Os métodos de compressão suportados são:

.Z - compress
.gz - gzip2
.bz2 - bzip2

sexta-feira, 20 de fevereiro de 2009

Usando programa xxd para visualizar em hexadecimal no vim

O programa externo xxd permite ver o arquivo tanto em caracter como em hexadecimal.

Edite o arquivo em binário:
vim -b arquivo
ou:
:set binary

Chame o programa para filtrar o texto:
%!xxd
o programa retorna o texto em hexadecimal

Altere a parte hexadecimal como se fosse um texto. As mudanças não são refletidas na parte caracter,
Alterações na parte caracter é ignorada.

Chame novamente para converter de volta:
%!xxd -r

Alterando um texto com objeto-texto do vim

Alterando uma sentença:
cis

Alterando várias sentenças em visual mode
v
as
as
c

Deletando texto com objetos-texto do vim

Deletando uma palavra.
Posicione o cursor sobre a palavra, qualquer posição serve.
daw

Deletando uma sentença:
das

Deletando texto no modo visual

As vezes é complicado escolher o comando de movimento para deletar um texto. Nesses casos use o modo visual.
Por exemplo, deletar metade final de uma palavra e a metade inicial da palavra
seguinte:
Posicione o cursor.
Selecione visualmente até o fim da palavra.
ve
Avance a seleção para a palavra seguinte:
llll
Delete a seleção:
d

Se usar o 'D' (deleta linhas), linhas inteiras serão deletadas mesmo que a
seleção visual seja partes de linhas.

Comandos com mais de um contador no vim

O vim suporta operadores-movimento com cada um com um contador:
3d2w
significa '3 deleções de 2 palavras' que na prática deleta 6 palavras.

Ou seja multiplique os contadores para saber o total.

Deletando texto e colocando-o em um registrador

Todos os comandos de deleção podem ser prefixados com um registrador.
Deleta uma palavra salvando-a no registrador 'e'.
"edW
Mesmo que não declare o registrador, o texto deletado irá para o registrador default (o registrador sem-nome ou aspas duplas) :
""p
p

quinta-feira, 19 de fevereiro de 2009

Comando de movimento inclusivo e exclusivo no vim

O tipo de comando de movimento afeta a quantidade de texto que o operador associado usa.

O movimento é exclusivo então o último caracter em direção ao fim do buffer não é incluído.
O movimento é inclusivo então o primeiro e último caracter do movimento são incluídos na operação.

Operador-movimento : combinando comandos no vim

O vim permite combinar comandos de edição com comandos de movimento.
O vim faz deduções inteligentes sobre até onde o movimento do cursor indica a ação do comando.

Normalmente usa com deleções e alterações.

Exemplo:
d4w
deleta 4 palavras, a partir do cursor, mas o vim não inclue o caracter aonde o cursor parou (na 5ª palavra).
w é exclusivo.

d2e
deleta 2 palavras, a partir do cursor, mas agora o vim inclue o caracter aonde o cursor parou.
e é inclusivo.

d$
deleta do cursor até o final da linha.
$ é inclusivo.

Para saber o que o vim fará, veja o help do comando de movimento.

Mostrando uma lista com posições saltadas

Toda vez que o cursor salta para outra linha, a posição original é salva numa
lista chamada de 'jump list'.

Isto inclui comandos como '/' e 'n', mas não pesquisas de caracteres (fx) ou
saltos de palavras (w, e). Também 'j' e 'k' não são considerados como saltos.

Para ver a lista das posições saltadas use:
:jumps
há uma jump list para cada janela. O máximo é de 100 entradas.

Ligando/Desligando uma opção booleana no vim

Se uma opção é booleana, ela só tem 2 valores.
Ligada:
:set number
Desligada
:set nonumber
adicione um no nome da opção quando quiser desliga-la.

Saltando para partes da tela

Use:
H
para saltar para a 1ª linha da janela
M
para saltar para o meio da janela.
L
para saltar para o fim da janela
Esses comandos pode levar uma contagem:
2H
3L
Lembre que o valor de :'scrolloff' ajusta H e L.

quarta-feira, 18 de fevereiro de 2009

Descartando as mudanças e restaurando um arquivo no vim

Se voce fez várias mudanças em um arquivo mas prefere descarta-las e recomeçar de novo use:
:e!
e o arquivo original será trazido de novo para a memória.

Verificando o valor de uma opção do vim

Use o nome da opção seguida de uma '?':
set compatible?
o comando imprime o valor corrente.

terça-feira, 17 de fevereiro de 2009

Editando um arquivo binário

Para editar um arquivo binário use na linha do shell:
vim -b datafile
isto faz com que a opção 'binary' fique ligada.
Dentro do vim também pode ser ligada:
:set binary
Com isso, o vim desliga qualquer opção que cause danos ao arquivo ao editar em binário. Por exemplo, 'textwidth' é definido como zero para evitar formatação da linha. E os arquivos são sempre lidos no formato Unix.

A edição binária pode ser usada para mudar uma mensagem dentro do programa. Tome
cuidado para não inserir ou deletar qualquer caractere. O programa não
funcionará mais.

Use 'R' para entrar em modo alteração.

Muitos caracteres não são visíveis. Para ve-los em hexadecimal use:
:set display=uhex
Para ver o código em hexa do caractere sob o cursor use o comando:
ga
aparece o código ASCII do caractere em decimal, hexadecimal e octal.

Para ter uma idéia das quebras-de-linha existentes use:
:set nowrap
Para ver qual byte o cursor está use:
g <ctrl-g>
o comando mostra a posição em termos de coluna, linha, palavra e byte.
O valor byte mostra o número do byte e a quantidade de bytes no arquivo. Isto leva em conta como o 'fileformat' muda o número de bytes que uma quebra de linha usa.

Para ir para um byte específico do arquivo use:
2312go

Limitações da criptografia do vim

O algoritmo de criptografia (rot13) do vim é fraco, sendo útil contra bisbilhoteiros casuais mas não contra um especialista em criptografia.

Além disso, o swap file não é criptografado. Assim enquanto edita, alguém com previlégios de super-usuário pode ler o texto não criptografado do arquivo.

Para evitar isso, edite o arquivo sem um swap file (o vim coloca tudo na memória ao invés):
vim -x -n cripto.txt
Quando já estiver editando, desabilite o swap file com:
:setlocal noswapfile
Sem o swap file, a recuperação fica impossível. Amenize salvando várias vezes durante a edição.
Mas, enquanto está em memória, ele está em texto claro acessível por super-usuário.

Se usar o viminfo, lembre que os conteúdos dos registradores estão em texto claro também.

Se quiser o máximo de segurança use um computador portátil desconectado da rede, use boas ferramentas de criptografia e mantenha o computador guardado em um local seguro.

Ativando ou desativando a criptografia de um arquivo

Para desativar o uso de criptografia em um arquivo , mude o valor da opção :key para um string vazio:
:set key= 
grave o arquivo para efetivar:
:w
Ativar a criptografia usando a opção :key não é recomendado. Pois a chave aparece claramente na tela e alguém olhando por trás de voce poderia ve-la.

Use, ao invés, o comando:
:X
ele pedirá por 2 vezes a chave
:w
grave para efetivar a mudança.

Criptografando um arquivo no vim

Para criar um arquivo criptografado faça no shell:
vim -x cripto.txt
o vim pedirá 2 vezes pela chave que será usada para criptografar / descriptografar o arquivo.

Ao abrir o arquivo, o vim pede 2 vezes a chave. Se a chave estiver errada ou se tentar visualizar com outro programa, aparecerá somente texto misturado (lixo).

O vim não tem como saber se a chave é correta ou não pois ela não fica no arquivo. Isso garante mais segurança ao esquema.

segunda-feira, 16 de fevereiro de 2009

Baixando um arquivo da internet cuja URL está sob o cursor no vim

Baixe um arquivo cuja URL está no texto e abrindo-o automaticamente no vim.

Posicione o cursor sob a URL e use o comando:
gf
ou
<ctrl-w>f
se quiser abrir o arquivo em uma nova janela.

O vim tenta descobrir um programa para baixa-lo.
Se algo não de certo (URL errada, sem permissão, etc) é melhor usar diretamente o programa externo para averiguação.

O acesso a internet é controlado através do plugin netrw.
Os formatos suportados e os programas usados são:
ftp:// usa ftp
rcp:// usa rcp
scp:// usa scp
http:// usa wget (só leitura)

O vim não faz o acesso. Ele depende dos programas citados.

Outros comandos como
:edit
:split
com argumentos com URLs farão o mesmo.

Comando de gravação funcionam exceto http.

Opção para mudar o formato do fim-de-linha de um arquivo

Se voce abriu um arquivo DOS (DOS+Windows+OS/2) que você quer converter para o formato Unix use:
:set fileformat=unix
:w
O arquivo é gravado no formato Unix.

Opção define os formatos de fim-de-linha serão tentados quando abrindo um arquivo

Cada sistema operacional que caracteres definem o fim de linha:
Unix - 
Dos -
Mac -
Isto significa que se você mover um arquivo de um sistema para outro você terá
problemas.
O Vim automaticamente reconhece formatos de arquivos e trata as coisas
automaticamente.

A opção
:set fileformats
lista os formatos de arquivo que serão tentados quando editando um novo arquivo.

Por exemplo:
:set fileformats=unix,dos
O Vim tentará primeiro o formato Unix (LF) e depois o dos (CR,LF) quando for ler um arquivo.
O Vim mostra o formato quando ele não é nativo (por exemplo Dos aberto no Unix).

O formato detectado é armazenado na opção 'fileformat'.
Use:
:set fileformat?
para ver o formato corrente do buffer.

Adicionado, deletando e descarregando buffers

Para remover buffers:
:bdelete
:bd
pode usar número e nome:
:bd 2
:bd a.txt
A janela se fecha também.
Se ele foi modificado mas não gravado, o vim dá um erro. Use '!' para forçar:
:bd! file.c
Mesmo deletado, o vim lembra deletado e aparece como "unlisted" na lista de buffers.

Normalmente o arquivo é adicionado à lista de buffers editando-o.
Você pode adiciona-lo explicitamente:
:badd nome-arquivo [num-linha]
:bad nome-arquivo [num-linha]
o número da linha permite definir aonde o cursor estará quando o arquivo for carregado.
Esses comandos somente adiciona à lista, o processo de edição não começa até
você mudar para o buffer.

Para remover da memória use:
:bunload a.txt
:bun número
o buffer continua na lista de buffers.

Percorrendo os buffers existentes

O próximo:
:bnext
:bn
O anterior:
:bprevious
:bp
O primeiro:
:bfirst
:bf
O último:
:blast
:bl
Esses comandos suportam 'contagem', permitindo saltar para 'n' buffers:
:3bn
E permitem abrir em uma nova janela (split):
:sbp

Voltando para o último arquivo editado (alternado)

O último arquivo editado é chamado de arquivo alternado.
Para ir e vir entre o arquivo corrente e o alternado:
<ctrl-6>
<ctrl-^>
É o jeito mais rápido para alternar entre 2 arquivos.

Selecionando um buffer

Use o número do buffer para edita-lo:
:buffer 2
:b 2
isto evita de digitar o nome do arquivo.

O único modo de saber o número é olhando a lista de buffers (:ls).

Pode-se usar o nome ou parte dele ao invés:
:b a
ele retornará o buffer de 'a.txt' por exemplo.
Se houver múltiplas possibilidades o vim dará um erro.

Para abrir o buffer em uma nova janela use:
:sbuffer 3
:sb 3
isso funciona com nomes também.
:sb re
Retornaria 'readme.txt' em uma nova janela, se ele estiver em um buffer.

Listando os buffers existentes

Use:
:buffers
ou:
:ls
para obter a lista de buffers na memória.

Use:
:ls!
:buffers!
para listar os buffers que estão fora da lista (normalmente, buffers de arquivos de help).

A saída do comando mostra:
1.O número do buffer. Pode-ser usa-lo para editar o buffer sem digitar o nome do arquivo.
2.As flags
u.....O buffer está fora da lista. Só listado com [!].
.%....O buffer da janela corrente.
.#....O buffer alternado. Será corrente com Ctrl-6 ou :e #.
...a..O buffer está ativo. Está carregado e sendo mostrado.
...h..O buffer está carregado, mas está oculto (no mostrado em uma janela).
....=.O buffer é read-only.
....-.O buffer não é modificável. A opção 'modifiable' está desligada.
.....+O buffer foi modificado.
O nome do arquivo.
3.O número da linha aonde o cursor esteve na última vez.

Opção para ocultar automaticamente buffer inativos

Use:
:set hidden
para que buffers que foram modificados mas serão abandonados fiquem na memória ocultos.
Essa opção é útil, se você tem buffers (arquivos) alterados mas não quer
grava-los ainda quando você muda para outro arquivo.

No final da sessão do Vim, você receberá uma aviso para salvar ou não os buffers ocultados.

Ocultando manualmente um buffer

Se você tem um buffer (arquivo na memória) com mudanças não gravadas e tentar
editar outro arquivo, o Vim dará um erro pedindo que salve o buffer antes.

Se não entanto não quiser salvar ainda você pode 'ocultar' o buffer e abrir um
novo arquivo.

Use o comando:
:hide e b.txt
ou
:hide
:e b.txt
o buffer corrente desaparece da tela, porém ele não é descartado, fica na memória.

Esse é o buffer oculto (hidden).
Quando sair do Vim, você será alertado para salva-los ou não.

O buffer e seus tipos

Buffer é uma cópia do arquivo lido na memória.
No final, se houve modificações você grava o buffer em cima do arquivo.

Além do conteúdo, o buffer contém marcas , definições ,etc.

Existem 3 tipos de buffer no vim.
Ativo (active)- aparece em uma janela, e o texto foi carregado.
Oculto (hidden) - Não está em uma janela, e o texto foi carregado.
Inativo (inactive) - Não está em um janela, e o texto não está carregado. Porém
informação sobre ele é mantida (marcas por exemplo).

Procurando um arquivo na inicialização do vim

Na linha de comando use:
gvim "+find stdio.h"
o vim procurará o arquivo nos diretórios declarados na opção 'path' do vim.

domingo, 15 de fevereiro de 2009

Abrindo um arquivo que esteja path

Se voce conhece o nome do arquivo, mas ele não é o arquivo corrente, busque-o diretamente:
:find inits.h
o vim use o valor da opção 'path' para localiza-lo e abri-lo na janela corrente para edição.
Para abrir numa nova janela use:
:sfind inits.h

Opção para definir quais caracteres fazem parte de nomes de arquivo e diretórios

Use:
:set isfname+={especificação}
Opção usada no comando 'gf' que edita arquivos cujo
nome está sob o cursor.

Usa a mesma especificação de 'iskeyword'.

Opção para definir diretórios a serem usados por comandos de pesquisa

Comandos como 'gf', ':find, etc irão procurar nos diretórios declarados pela
opção 'path'.
Use:
:set path+=/home/projetos
inclui um novo diretório ao path do vim.
Este nome esta no formato absoluto.
:set path+=./templates
está no formato relativo ao diretório do arquivo.
:set path+=templates
procura no diretório abaixo do diretório corrente.
:set path+=/usr/*/include
procura em todos subdiretórios/include de usr.
:set path+=/projects/invent/**/include
procura em toda árvore de diretórios abaixo de invent. Incluindo sub-diretórios de sub-diretórios etc. até chegar a um sub-diretório include.

Para adicionar um diretório no início da lista de diretórios use:
:set path^=../lib

Procurando o arquivo cujo nome está sob o cursor

Use:
gf
e o Vim irá procura-lo e abri-lo para edição na janela corrente.
Se existe mais de um arquivo no path, use o número dele:
2gf
Se quiser editar em uma nova janela use:
<Ctrl-W> <Ctrl-F>
O Vim procura no diretório corrente, se não achar usa o valor da opção 'path'.

Mudando diretório corrente só para uma janela

Se quiser que uma janela da tela use um diretório diferente do diretório corrente mude o seu diretório local:
:lcd /outro-diretório
Para voltar para o diretório corrente do vim use:
:cd
na janela com um diretório corrente local.

Mudando e imprimindo o diretório corrente

Para mudar o diretório corrente do vim use:
:cd diretório
Se nenhum diretório é passado, vai para o diretório
home (Unix).
Para imprimir o diretório corrente do vim use:
:pwd
Para voltar para o diretório corrente anterior use:
:cd -

Usando browser de diretórios remotamente

Use:
:Explore ftp://host/diretório
:e scp://host/diretório

Comandos do browser de diretórios do vim

Comandos para mostrar e editar arquivos:
<enter> - abre o arquivo na janela corrente.
o - divide a janela horizontalmente e abre o arquivo.
v - divide a janela verticalmente e abre o arquivo.
p - Use a janela de preview
P - edite na janela anterior
t - abre o arquivo em uma nova aba

Comandos para controlar o modo de exibição:
i - percorre os tipos de listagem (incluindo mostrar tamanho e data).
s - percorre os tipos de ordenação
r - inverte a ordenação corrente

Comandos extras:
c - Faz com que o diretório corrente do vim seja o mesmo do browser.
R - Renomeia o diretório ou arquivo sob o cursor. Entre o novo nome na linha de comando.
D - Deleta o arquivo ou diretório sob o cursor.
contadormb contadorgb - faz um bookmark / vai para o bookmark

Para ver as definições do plugin use:
:NetrwSettings

Para explorar um diretório:
:Explore [diretório]