Compartilhe esta página

Aprenda X em Y Minutos

Onde X=vim

Vim (Vi IMproved - Vi Melhorado) é um clone do editor vi para Unix. Ele é um editor de texto projetado para ter velocidade e produtividade, e está presente na maioria dos sistemas UNIX. O editor tem um grande número de atalhos de teclado para agilizar a navegação para pontos específicos no arquivo, além de edição rápida.

Navegação do Vim: o básico

    vim <nome-do-arquivo>   # Abre <nome-do-arquivo> no vim
    :q               # Fecha o vim
    :w               # Salva o arquivo atual
    :wq              # Salva o arquivo e fecha o vim
    :q!              # Fecha o vim e descarta as alterações no arquivo
                     # ! depois de qualquer comando força a sua execução
                     # ! *força* :q a executar, fechando o vim sem salvar antes
    :x               # Salva o arquivo e fecha o vim (atalho para :wq)

    u                # Desfazer
    CTRL+R           # Refazer

    h                # Move o cursor para a esquerda
    j                # Move o cursor para baixo
    k                # Move o cursor para cima
    l                # Move o cursor para a direita

    # Movendo o cursor dentro da linha

    0                # Move para o início da linha
    $                # Move para o final da linha
    ^                # Move para o primeiro caractere da linha (ignora caracteres em branco)

    # Pesquisa no texto

    /palavra         # Destaca todas as ocorrências de 'palavra' após o cursor
    ?palavra         # Destaca todas as ocorrências de 'palavra' antes do cursor
    n                # Move o cursor para a próxima ocorrência após a pesquisa
    N                # Move o cursor para a ocorrência anterior após a pesquisa

    :%s/foo/bar/g    # Substitui 'foo' por 'bar' no arquivo inteiro
    :s/foo/bar/g     # Substitui 'foo' por 'bar' na linha atual

    # Pulando para caracteres específicos

    f<caracter>      # Posiciona o cursor no próximo <caracter>
    t<character>     # Posiciona o cursor antes do próximo <caracter>

    # Por exemplo,
    f<               # Posiciona o cursor no <
    t<               # Posiciona o cursor logo antes do <

    # Movendo por palavras

    w                # Move o cursor uma palavra adiante
    b                # Move o cursor uma palavra atrás
    e                # Move o cursor ao fim da palavra atual

    # Outros caracteres para mover o cursor no arquivo

    gg               # Move para o topo do arquivo
    G                # Move para o final do arquivo
    :NUM             # Move para a linha NUM (NUM é qualquer número)
    H                # Move para o topo da tela visível
    M                # Move para o meio da tela visível
    L                # Move para o final da tela visível

Modos

O Vim é baseado no conceito de modos.

Modo Comando - usado para navegar e escrever comandos - o Vim já inicia nesse modo Modo Inserção - usado para fazer alterações no arquivo Modo Visual - usado para destacar textos e executar comandos neles Modo Ex - usado para ir a linha com ‘:’ no final da tela para executar comandos

    i                # Coloca o Vim no Modo Inserção, logo antes do cursor
    a                # Coloca o Vim no Modo Inserção, logo após o cursor
    v                # Coloca o Vim no Modo Visual
    :                # Coloca o Vim no Modo Ex
    <esc>            # Sai de qualquer modo que você estiver, e coloca o Vim no Modo Comando

    # Copiando e colando texto

    y                # Coloca a seleção atual na área de transferência
    yy               # Coloca a linha atual na área de transferência
    d                # Deleta a seleção tual
    dd               # Deleta a linha atual
    p                # Cola o texto copiado após a posição do cursor
    P                # Cola o texto copiado antes da posição do cursor
    x                # Deleta o caractere que está na posição do cursor

A ‘Gramática’ do Vim

Podemos pensar no Vim como uma série de comendos em um formato ‘Verbo-Modificador-Nome’, onde:

Verbo - sua ação Modificador - como você executará sua ação Nome - o objeto onde você vai executar sua acão

Alguns exemplos importantes de ‘Verbos’, ‘Modificadores’ e ‘Nomes’:

    # 'Verbos'

    d                # Apagar (Delete)
    c                # Alterar (Change)
    y                # Copiar (Yank)
    v                # Seleção Visual

    # 'Modificadores'

    i                # Dentro (Inside)
    a                # Em torno de (Around)
    NUM              # Número (NUM qualquer número)
    f                # Pesquisa algo e posiciona o cursor acima do resultado
    t                # Pesquisa algo e posiciona o cursor logo antes do resultado
    /                # Encontra algo a frente do cursor
    ?                # Encontra algo antes do cursor

    # 'Nomes'

    w                # Palavra (word)
    s                # Sentência
    p                # Parágrafo
    b                # Bloco

    # Exemplos de comandos

    d2w              # Apaga 2 palavras
    cis              # Altera dentro de uma sentência
    yip              # Coloca o parágrafo atual da área de transferência)
    ct<              # Altera para '<'
                     # Altera todo o texto a partir da posição do cursor até o próximo '<'
    d$               # Apaga tudo da posição do cursor até o final da linha

Alguns atalhos e dicas

    <!--TODO: Adicionar mais!-->
    >                # Adiciona um bloco de indentação
    <                # Remove um bloco de indentação
    :earlier 15m     # Reverte o documento para como ele estava há 15 minutos atrás
    :later 15m       # Reverte o comando acima
    ddp              # Troca linhas consecutivas de posição, dd e depois p
    xp               # Permuta caractere atual e o seguinte
    Xp               # Permuta caractere atual e o anterior
    .                # Repete a última ação

    # Em geral, o usuário pode associar um comando em maísculas (exemplo: D) com
    # "executar este comando até o final da linha"

    # Usar a tecla de um comando duas vezes geralmente significa executar este
    # comando sobre toda a linha (exemplo: dd apaga a linha inteira)

Macros

Macros, basicamente, são ações graváveis. Quando você começa a gravar uma macro, ele salva toda ação e comando que você usar, até que você pare de gravar. Ao executar uma macro, ele aplica exatamente a mesma sequencia de ações e comandos na seleção atual.

    qa               # Inicia a gravação de uma macro chamado 'a'
    q                # Para a gravação
    @a               # Executa a macro
    @@               # Executa a última macro executada

Configurando o ~/.vimrc

O arquivo .vimrc pode ser usado para configurar o Vim no seu início.

Exemplo de arquivo ~/.vimrc

" Exemplo de ~/.vimrc
" 2015.10

" Obrigatório para rodar apenas no Vim (Vi Improved)
set nocompatible

" Determina o tipo de arquivo pelo nome para habilitar indentação automática, etc
filetype indent plugin on

" Habilita sintaxe colorida
syntax on

" Ativa um 'auto-completar' melhor para a linha de comando
set wildmenu

" Faz as buscas não diferenciarem maiúsculas-minúsculas (case insensitive)
" Exceto quando você usar letras maiúsculas
set ignorecase
set smartcase

" Quando criar uma nova linha e a indentação por tipo de arquivo estiver
" desabilitada, mantem a mesma indentação da linha atual
set autoindent

" Mostra o número das linhas à esquerda
set number

" Opções de indentação, aqui você pode mudar como preferir

" Número de espaços visíveis por TAB
set tabstop=4

" Número de espaços por TAB ao editar um arquivo
set softtabstop=4

" Número de espaços usados nas funções de indentação (>> e <<)
set shiftwidth=4

" Converte TABs em espaços
set expandtab

" Habilita indentação/alinhamento inteligente
set smarttab

Referências

Vim | Home (EN)

$ vimtutor pt

Vim: um tutorial/cartilha (EN)

O que são as partes sombrias do Vim que sua mãe nunca te explicou? (tópico no Stack Overflow) (EN)

Arch Linux Wiki (EN)


Sugestões ou correções? Abra uma issue no repositório do GitHub, ou faça um pull request você mesmo!

Originalmente contribuído por RadhikaG e atualizado por 4 colaborador(es).