sábado, 25 de abril de 2009

Opção para forçar o Unix/Linux gravar o swap file

No Unix/Linux quando você grava um arquivo, os dados normalmente vão para um
buffer de memória e são gravados de fato quando o sistema achar que é o momento.
Isto pode levar alguns segundos.
Se você quiser ter certeza que os dados vão para o disco use:
:set swapsync
Este comando executa uma operação 'sync' depois de cada gravação do swap file
para forçar a gravação em disco.

Desativando o swap file

Você pode querer desativar o uso de um swap file quando editando um arquivo
muito grande e não se importa com recuperação.
Use:
:set noswapfile
Essa opção é específica para cada buffer.

Escolhendo entre várias versões do swap file

O Vim busca sempre evitar de gravar sobre um swap file existente. A primeira vez
que edita o swap file chama '.arquivo.txt.swp', na vez seguinte
'.arquivo.txt.swo' e assim por diante.
Você pode dizer ao Vim qual swap file utilizar:
vim -r .arquivo.txt.swo
Para ver qual o nome do swap file que está sendo usado use:
:swapname

A sequência de eventos quando gravando um arquivo

Sequência de passos quando o Vim grava um arquivo.

1. O Vim verifica se o arquivo foi alterado externamente. Caso tenha
acontecido o editor envia uma aviso e pergunta se quer continuar.
2. Se 'writebackup' ou 'backup' estão ligados, qualquer backup antigo é
removido. O arquivo corrente então é copiado para o backup.
3. O buffer é gravado no arquivo.
4. Se o 'patchmode' está ligado e não existe nenhum arquivo de patch, o arquivo
de backup é renomeado e se torna o arquivo de patch.
5. Se a opção 'backup' não está ligada, e 'writebackup' está ligada, remove o
arquivo de backup.

Entrando no modo restrito pela linha de comando

Use:
vim -Z
No modo restrito, todos comandos que fazem uso do shell externo são proibidos.
Isso inclui ':shell', , filtragem, etc.

Mostrando a versão e opções de compilação pela linha de comando

Use a opção:
vim --version
Mostrará a versão do Vim e as opções que foram usadas na compilação do programa.

Mostrando o help da linha de comando

Use:
vim --help
Será mostrado todos argumentos de linha de comando.

Saindo do modo inserção automaticamente depois de um intervalo de tempo

Se você entra em modo inserção deve ser pressionado o para voltar para o modo normal para executar alguns comandos.

Elimine essa ação repetitiva definindo o código abaixo em seu .vimrc:
" automaticamente deixe o modo inserção depois de 'updatetime' milisegundos 
" de inatividade.
au CursorHoldI * stopinsert
" defina o 'updatetime' de até 2 segundos quando no modo inserção
au InsertEnter * let updaterestore=&updatetime | set updatetime=2000
au InsertLeave * let &updatetime=updaterestore
O primeiro autocomando tem o evento 'CursorHoldI' que ocorre quando o usuário
não digita nada durante o tempo especificado na opção 'updatetime' e está no
modo inserção. O comando executado será 'stopinsert', o qual equivale a
pressionar no modo inserção.

O autocomando seguinte, ativado no 'InsertEnter' que ocorre antes de entrar no
modo inserção, salva o a opção 'updatetime' e define num valor conveniente, aqui
2 segundos.

O autocomando final, ativado no 'InsertLeave' que ocorre ao deixar o modo
inserção, retorna o valor original da opção 'updatetime'.

Isso permite usar um valor específico de 'updatetime' para sair do modo inserção
sem afetar outras funções, por exemplo mapeamento com várias teclas.

sexta-feira, 24 de abril de 2009

Opção para definir como a última linha do arquivo termina

O Vim supõe que a última linha termina com um carácter .
Algumas vezes você encontra um arquivo estranho que contém uma linha incompleta.
Quando o Vim encontra este tipo de arquivo, ele liga a opção 'noendofline'.
Se o seu arquivo termina com uma linha completa, a opção 'endofline' é ligada.

Se quiser mudar se o arquivo termina com use:
:set endofline
caso contrário:
:set noendofline
Esta opção só funciona com
:set binary

Definindo uma lista de arquivos com palavras para autocompletar

Use a seguinte opção:
:set dictionary=arquivo,arquivo,...
Isso define arquivos que serão procurados quando pressionando <Ctrl-N> e
<Ctrl-P> para completar palavras.
Exemplo:
:set dictionary=/home/joao/palavras
Você pode também especificar um dicionário na opção 'complete' com a flag 'k':
:set complete+=/home/joao/palavras

quinta-feira, 23 de abril de 2009

Gravando um arquivo

Para gravar o buffer (arquivo) use:
:write teste.txt 
:w teste.txt
O comando ':write' não regrava um arquivo existente com o mesmo nome. Use:
:w! teste.txt
para forçar isso.
Para gravar e sair do Vim use:
:wq
para gravar e sair, sem gravar os buffers ocultos use:
read-only se:
:wq!
Para gravar com um novo nome:
:wq b.txt
Para forçar a gravação, caso o nome já exista use:
:wq! b.txt
Para gravar, somente se o buffer foi mudado , e sair use:
:xit

Salvando configurações definidas na linha de comando em um arquivo

Depois de experimentar com os comandos ':map', ':abbreviate' e ':set', seria legal se
pudesse salva-los e usa-los de novo.
O comando ':mkvimrc' grava todas suas definições em um arquivo:
:mkvimrc {arquivo}
Você pode ler esse arquivo usando o comando:
:source {arquivo}
Somente mapeamentos globais são gravado.

quarta-feira, 22 de abril de 2009

Opção para definir o arquivo com a lista de erros de compilação

A opção:
:set errorfile=
define o arquivo default que o comando ':clist' e opção de linha de comando '-q'
usarão para percorrer os erros de compilação.
Este arquivo não é usado como saída do comando ':make'.

Usando um arquivo de erros gerado externamente

Caso você tenha rodado 'make' externo e gerado seu próprio arquivo de erro, você pode dizer ao Vim sobre ele com:
:cfile 'arquivo-de-erro'
'arquivo-de-erro' é a saída do comando 'make' ou do compilador.
Se 'arquivo-de-erro' não foi especificado a opção 'errofile' é usada.

terça-feira, 21 de abril de 2009

Classificando um bloco de linhas no modo visual

Ponha o cursor na 1ª linha do bloco.
Inicie o modo visual-linha:
V
Mova para o final do bloco
Execute o comando de filtro:
!sort
O Vim preenche a linha de comando com:
'<,'>!sort

Classificando linhas usando marca

Classificando uma série de linhas (de um Makefile):
SOURCES = \
            time.cpp \
            set_ix.cpp \
            rio_io.cpp \
            arm.cpp \
            app.cpp \
            amem.cpp \
            als.cpp \
            aformat.cpp \
            adump.cpp \
            rio.cpp \
            progress.cpp \
            add.cpp \
            acp.cpp \
            rio_glob.cpp
Posicione o cursor no início da lista (a 2ª linha).
Crie uma marca ali:
ma
Posicione o cursor no final da lista.
Entre o filtro:
!'a
O vim traduz na linha de comando para:
:.,$!
Entre o filtro:
sort
As linhas são classificadas.

Percorrendo uma lista de tags selecionadas

Caso os comandos ':tag {palavra}' ou ':tselect {palavra}' retornem mais uma
ocorrência, use os comandos abaixo:
:tnext
próxima tag
:tprevious
tag anterior
:tNext
tag anterior
:tfirst
primeira tag
:tlast
última tag
Todos suportam o argumento 'contagem' para saltar 'n' ocorrências.

Procurando tag usando expressão regular

Se você só conhece parte do nome de uma procedure você pode usar o comando
:tag
para procura-la usando uma regexp.
Procure uma procedure que tem 'write' no nome:
:tag /write
Procure uma procedure que comece com 'read':
:tag /^read
Procure uma procedure cuja grafia você tem dúvidas:
:tag /DoFile\|do_file\|Do_File
:tag /[Dd]o_\=[Ff]ile
Esses comandos podem retornar múltiplos resultados.

Mapeamento para percorrer os buffers

Use:
map <C-right> <ESC>:bn<CR>
map <C-left> <ESC>:bp<CR>
Mapeamentos para retornar o buffer anterior e seguinte respectivamente.

Opção para definir que programa chamar para o comando 'K'

O comando 'K' chamará um programa externo que receberá a palavra sob o cursor.
O programa a ser chamado está declarado na opção:
:set keywordprg=man
No Unix, o default é 'man'. Pode-se definir ':help' para chamar o help do Vim
passando a palavra.

Indentando um bloco no modo visual

1. Posicione o cursor no delimitador.
2. Inicie o modo visual:
v
3. Selecione o bloco {} internamente com:
i}
4. Indente o texto com:
>

segunda-feira, 20 de abril de 2009

Indentando um bloco de texto entre delimitadores

Se quiser indentar um nível um texto entre '{}' faça:
Posicione o cursor no delimitador e use o comando-movimento seguinte:
>%
Infelizmente isso indenta o delimitador também. Se você quiser só deslocar o conteúdo do bloco :
Posicione o cursor no delimitador e use comando-objeto_texto:
>i{
'i{' é o objeto texto 'bloco {} interno'.

Mostrando as definições de macro de um programa C

Mostrando as definições de macro de um programa C.
Mostra a partir do início:
[d

Mostra depois do cursor:
]d

Mostrando uma lista com todas definições de macro de um program C.
Mostra a partir do início:
[D

Mostra depois do cursor:
]D

Saltando para definição da macro C cujo nome está sob o cursor

Salta para uma definição da macro cujo nome está sob o cursor use.
A pesquisa começa no início do arquivo:
[<Ctrl-D>
A pesquisa começa a partir do cursor:
]<Ctrl-D>
Esses comandos procuram também nos arquivos que estão em '#include'.

Saltando para a linha que tem a palavra sob o cursor

Para saltar para a primeira ocorrência da palavra sob o cursor:
[<Ctrl-I>
Começa a partir do início do arquivo. Linhas que parecem comentários são
ignoradas

Para saltar para ocorrências a partir do cursor para frente:
]<Ctrl-I>

Mudando de modo visual carácter/linha para bloco

Se você está usando o modo visual carácter ou linha mas descobre que você deveria estar
usando o modo visual bloco use o comando:
<Ctrl-V>
para mudar rapidamente.

Copiando texto no modo visual

O comando 'y' irá copiar o texto selecionado em um registrador. Enquanto que o comando 'Y' copiará linhas inteiras no registrador.

Opção para controlar o uso de janelas quando se muda de buffer

A ação default do vim para os comandos 'split/buffer' (p.e :sbnext, :sbuffer
arquivo ,etc) é dividir a janela corrente e carregar o arquivo.
Usando a opção:
:set switchbuf=useopen
faz com que o Vim só salte para a primeira janela que contiver o buffer, se
existir.
Nota: você ainda pode dividir a janela para ver 2 visões do mesmo arquivo com
comandos ':split'.
Quando você roda o ':make' e ocorre erro, o Vim mostrará o arquivo com o
problema na janela corrente.
Se usar:
:set switchbuf=split
o editor dividirá a janela corrente mostrando o arquivo errado na nova janela.