Resumo dos principais comandos do vi/vim


Opções da linha de comando:
-R abre arquivo como somente leitura
-r/-L lista os arquivos swap no diretório atual, bem como em diretórios chave e sai.
+ começa na última linha
+numero começa na linha determinada. Ex: vim +15 arq.txt começa na linha 15 de arq.txt, ao invés da primeira
-o abre os arquivos em "janelas" (a tela fica dividida horizontalmente). Útil para comparar arquivos.
-O abre os arquivos em "janelas verticais" (a tela fica dividida verticalmente).
-X não conecta em um servidor X
Modos de operação:
O vim possui dois modos de operação:

Modo de inserção de texto:
nesse modo, o vim comporta-se como um editor de texto normal, ou seja, cada tecla pressionada exibirá seu valor na tela normalmente. Para entrar no modo de inserção de texto, pressione a tecla INSERT ou a tecla i.

Modo de comandos:
É o modo inicial do Vim. Nesse modo, cada tecla (ou combinação de teclas) possui uma função especial. Para enttrar no modo de comandos, pressione a tecla ESC.

Arquivos SWAP
Quando você abre um arquivo no vim, ele cria um arquivo oculto de swap. As alterações são registradas inicialmente nesse arquivo de swap e efetivadas no arquivo editado a cada operação de salvamento. Caso haja algum problema durante a edição do arquivo (ex: falta de energia), quando o mesmo arquivo é editado novamente, o vim detecta a presença do arquivo swap e oferece algumas opções:

Operações com arquivos:
Observação: sempre que há a troca do arquivo atual (quando há mais de uma arquivo aberto), quando um arquivo é aberto para edição ou quando o programa for encerrado, é necessário salvar o arquivo, caso o mesmo tenha sofrido alterações. Caso não se deseje salvar as alterações, deve-se acrescentar uma exclamação "!" - para forçar o fechamento/troca do arquivo, desprezando as alterações no arquivo atual.

:e arquivo
abre um arquivo para edição.

:r arquivo
insere o conteúdo de um arquivo na posição atual do cursor

:w
grava o arquivo atual e continua o trabalho.

:w arquivoNovo
salva o arquivo atual com outro nome (arquivNovo) e continua trabalhando no mesmo arquivo (ao contrário de outros editores de texto que passariam a trabalhar com o arquivo recém criado - no caso do exemplo, arquivoNovo).

:q 
sai do programa.

:q!
sai do programa descartando as alterações.

:n 
passa para o proximo arquivo aberto.

:prev
passa para o arquivo anterior

:first 
vai para o primeiro arquivo

:last
vai para o ultimo arquivo

Observação: você pode "juntar" alguns comandos, de modo a realizar duas operações juntas. Por exemplo, para gravar o arquivo e sair do programa, ao invés de executar :w e :q em separado, você pode fazer :wq. Da mesma forma, :wn grava o arquivo atual e vai para o próximo, :wprev grava o arquivo atual e vai para o anterior e assim sucessivamente. Por último, :x é um apelido para :wq (salva e sai).

Comandos para navegação dentro do Texto:

h
um caracter para a esquerda

l
um caracter para a direita


j
uma linha abaixo


k
uma linha acima

método para memorizar: a tecla J lembra uma seta pra baixo, e tem exatamente esta função. A tecla ao seu lado (K) é a seta para cima. A tecla à esquerda das duas (H) faz a seta para a esquerda. E a tecla à direita do conjunto (L) é a seta para a direita. Simples, não?

gg
:1
primeira linha

:numero
vai para a linha desejada. Por exemplo, :50 vai para a 50ª linha.

numero+G
vai para a linha desejada. Por exemplo, 10G vai para a 10ª linha.

G
vai para a última linha. Obs: G maiúsculo.

^
inicio da linha (é preciso digitar um espaço depois do símbolo)

$
final da linha.

Comandos de busca:
f+caracter
avança para a direita até a primeira ocorrência do caracter

F+caracter
retrocede para a esquerda até a primeira ocorrência do caracter

/
pesquisa por string/regex.

?
pesquisa por string/regex. Pesquisa no sentido inverso (para cima).

*
pesquisa pela palavra sobre o cursor.

#
pesquisa pela palavra sobre o cursor. pesquisa no sentido inverso (para cima).

Em quaisquer uma das pesquisas, pressione n para localizar a proxima ocorrência. Pressione N para pesquisar no sentido inverso (ocorrencia anterior - para cima).

Comandos de substituição:
:[range]s/texto\ a\ procurar/[texto a substituir]/[gc]

Onde:
[range] (opcional): range de linhas onde realizar a busca/substituição. Se não informado, faz apenas na linha atual. Caracteres especiais em range:
% - todas as linhas (arquivo todo)
$ - até o fim do arquivo

texto\ a\ procurar: texto que será buscado. Caracteres especiais (que têem significado devem ser protegidos (ou escapados) com "\" (sem aspas), como no exemplo. Para pesquisar por uma "\" utilize "\\".
[texto a substituir] (opcional): texto que será trocado pelo que for encontrado. Se não for informado, o texto encontrado é removido e nada é posto em seu lugar.
g: substitui todas as ocorrencias do texto encontrado. Se não estiver presente, apenas a primeira ocorrência de cada linha é substituida.
c: pede confirmação antes de fazer a substituição


Exemplos de ranges:
:%s/brasil/Brasil/        (arquivo todo)
:50,60s/brasil/Brasil/   (da linha 50 até a 60)
:20,$s/brasil/Brasil/      (da linha 20 até o fim do arquivo)



Mais exemplos:
:%s/brasil/Brasil/gc

Comandos para alteração de caracteres:
~
inverte a caixa do caracter (converte maiusculas em minusculas e vice-versa)

x
d+espaço
exclui o caracter sobre o cursor

r+caracter
troca o caracter sobre o cursor pelo digitado.

Comandos para operações com Buffer (área de transferência)
D
dd
recorta toda a linha e coloca no buffer

Y
yy
copia toda a linha para o buffer, sem removê-la do local atual.

p
cola o conteúdo do buffer na posição atual do cursor.

P
cola o conteúdo do buffer na linha acima da posição atual do cursor.

Repetição de comandos:
numero+comando
executa o comando um certo numero de vezes. Exemplos:

10x
exclui 10 caracteres (o que está sob o cursor mais nove à direita)

3yy
copia 3 linhas para o buffer (a linha atual mais duas abaixo)

5l
"anda" 3 caracteres para a direita

Mistureba (misturando comandos):
dG
recorta tudo entre a posição atual do cursor e o fim do arquivo. Mistura de d (recortar) com G (ir para o final do arquivo)

dgg
recorta tudo entre a posição atual do cursor e o começo do arquivo. Mistura de d (recortar) com gg (ir para o começo do arquivo)

:r !cmd
executa o comando cmd e insere sua saída no texto.

:wq
salva e sai

:wn
salva e avança para o próximo arquivo

:wlast
salva e avança para o último arquivo

Modos Visuais:
Permitem selecionar trechos do texto, para definir o local que será afetado pelo próximo comando (uma busca e substituição ou copiar/recortar, por exemplo).
Existem dois tipos:
Visual (ativado com a tecla v): permite selecionar trechos de linhas, linhas inteiras ou uma combinação disso (uma linha interira e um pedaço de outra abaixo ou acima, por exemplo). Após selecionar, é possível recortar (com d), copiar (com y) ou substituir por outro conteúdo (com p).
Visual Block (ativado com ctrl+v): similar ao modo visual, porém permite selecionar blocos de texto. Por exemplo, é possível selecionar apenas a primeira coluna de cada linha (útil para descomentar várias linhas de uma vez em arquivos de configuração).

Opções úteis
Obs: a maioria dessas opções pode ser colocada diretamente no arquivo de configuração do vim, /etc/vim/vimrc

:set ai
:set noai
Liga/desliga autoidentação. Normalmente é desejavel deixar a identação ligada, principalmente quando se está escrevendo programas/scripts (deixa o texto mais organizado). Porém, em algumas situações pode atrapalhar. Por exemplo, quando se cola texto no PuTTY (a partir do Windows) e essa opção está ativada, o texto fica com um aspecto de "escada" (veja imagem abaixo).

:set bg=dark
:set bg=light
Informa ao vim qual se a cor de fundo da tela é clara ou escura, para que ele possa utilizar um esquema de cores agradável. Normalmente conexões via console e SSH tem fundo escuro, enquanto que em emuladores de console dos ambientes gráficos (kterm no KDE, gterm no Gnome, etc) costumam ter o fundo claro.

:set showcmd
:set noshowcmd
Faz com que os comandos digitados, bem como os modificadores numéricos apareçam, à esquerda da informação de posição do cursor.

:set number
:set nonumber
Exibe/oculta o numero de cada linha

:help assunto
Mostra o help do vim sobre o assunto/comando informado. Será aberta uma nova "janela" (a tela ficará dividida horizontalmente em duas). Para alternar entre as janelas, pressione CTRL+W CTRL+W (duas vezes). Assim, você pode alternar entre a navegação no texto do help e no seu próprio texto. Para sair do help, pressione :q. Você voltará à edição do seu arquivo.

:! cmd
executa o comando cmd no shell dentro do vim, e mostra o resultado na tela (mas não altera o arquivo). Útil para compilar código/realizar testes durante a programação sem precisar sair do editor. Ou para trocar a permissão do arquivo sendo editado, para permitir salvar as alterações.
Ex:
:! gcc -o main main.c
:!php arquivo.php
:chmod u+w arquivo.txt

Nenhum comentário: