Saltar para o conteúdo

Vim/Editando

Origem: Wikilivros, livros abertos por um mundo aberto.

Deletando uma parte do texto

[editar | editar código-fonte]

O comando "d" deleta uma parte do texto, copiando o conteúdo para a memória.

dd  -  apaga a linha atual
5dd -  apaga 5 linhas (também pode ser: d5d)

dw  -  apaga uma palavra
5dw -  apaga 5 palavras (também pode ser: d5w)

dl  -  apaga uma letra (sinônimo: x)
5dl -  apaga 5 letras (também pode ser: d5l ou 5x)

d^  -  apaga da posição atual até o início da linha (sinônimo: d0)
d$  -  apaga da posição atual até o final da linha (sinônimo: D)

dgg - apaga da posição atual até o início do arquivo
dG  - apaga da posição atual até o final do arquivo
D - apaga o resto da linha à partir do ponto atual

Depois do texto ter sido colocado na memória, digite "p" para "colar" o texto em uma outra posição.

Outros comandos:

diw -  apaga uma palavra mesmo que o cursor não esteja posicionado no início dela
dip -  apaga o parágrafo atual 
cis -  altera (change) a sentença atual
vib -  inicia seleção visual na sessão corrente [entre colchetes] - equivale a: vi[
diB -  deleta o bloco entre chaves {} - equivale a di{
ci" -  altera trecho entre aspas

d4b -  apaga as quatro palavras anteriores
dfx -  apaga até o próximo x
d/casa/+1 - deleta do ponto atual até a linha após a palava casa

Com relação aos blocos tipo: "cip" veja a ajuda relacionada:

:help text-objects

Copiando sem deletar

[editar | editar código-fonte]

O comando "y" ("yank") permite copiar uma parte do texto para a memória sem deletar. Existe uma semelhança muito grande entre os comandos "y" e os comandos "d":

yy  -  copia a linha atual (sinônimo: Y)
5yy -  copia 5 linhas (também pode ser: y5y ou 5Y)

yw  -  copia uma palavra
5yw -  copia 5 palavras (também pode ser: y5w)

yl  -  copia uma letra
5yl -  copia 5 letras (também pode ser: y5l)

y^  -  copia da posição atual até o início da linha (sinônimo: y0)
y$  -  copia da posição atual até o final da linha

ygg -  copia da posição atual até o início do arquivo
yG  -  copia da posição atual até o final do arquivo

Digite "p" para "colar" o texto em uma outra posição.

:%y+ ......... copia o arquivo inteiro para a área de tranferência
:1,5y c ...... copia da linha 1 até linha 5 para o registro 'c'

Forçando a edição de um novo arquivo

[editar | editar código-fonte]

O vim como qualquer outro editor é muito exigente no que se refere a alterações de arquivo. Se você estive editando um arquivo e quer abandona-lo o vim perguntará se quer salvar alterações, se você estiver certo de que não quer salvar o arquivo atual e deseja imediatamente começar a editar um novo arquivo faça...

:enew!

O comando acima é uma abreviação de 'edit new'

De modo similar você pode desejar ignorar todas as alterações feitas desde a abertura do arquivo

:e!

Editando em nova janela

[editar | editar código-fonte]

Caso deseje manter o arquivo atual e editar 'simultaneamente' outro arquivo pode dividir a janela assim:

Ctrl-w n

Veja mais em 'trabalhando com janelas'

Editando em modo de comando

[editar | editar código-fonte]

Para mover um trecho usando o modo de comandos faça:

:10,20m $

O comando acima move 'm' da linha 10 até a alinha 20 para o final '$'

:g /palavra/ m 0

Move as linhas contendo 'palavra' para o começo (zero)

:g/padrão/d 

O comando acima deleta todas as linhas contendo a palavra 'padrão'

Podemos inverter a lógica do comando global 'g'

:g!/padrão/d

Não delete as linhas contendo padrão, ou seja, delete tudo menos as linhas contendo a palavra 'padrão'.

:7,10copy $

Da linha 7 até a linha 10 copie para o final

Obs: veja mais sobre edição no modo de comando na seção 'buscas e substituições'

Digamos que você tem o seguinte texto...

1  este é um texto novo
2  este é um texto novo
3  este é um texto novo
4  este é um texto novo
5  este é um texto novo
6  este é um texto novo
7  este é um texto novo
8  este é um texto novo
9  este é um texto novo
10 este é um texto novo

... e quer apagar "é um texto" da linha 5 até o fim, isso pode ser feito assim

:5,$ normal 0wd3w

Exeplicando o comando acima:

:5,$ ............ indica o intervalo que é da linha 5 até o fim "$"
normal .......... executa em modo normal
0 ............... zero move o cursor para o começo da linha
w ............... pula uma palavra
d3w ............. delete 3 palavras 'w'

Obs: É claro que um comando de substituição simples

:5,$s/é um texto//g

Resolveria neste caso, mas a vantagem do método anterior é que é válido para três palavras, sejam quais forem. :)

Obtendo informações do arquivo

[editar | editar código-fonte]
ga ............. mostra o código do caractere em decimal hexa e octal
^g ............. mostra o caminho e o nome do arquivo

Obs: O código do caractere pode ser usado para substituições, especialmente em se tratando de caracteres de controle como tabulações \%x09 ou final de linha DOS/Windows \%x0d

Você pode apagar os caracteres de final de linha Dos/Windows usando uma simples substituição, veja mais adiante:

 :%s/\%x0d//g

Na seção 'Como editar preferências' há um código para a barra de status que faz com que a mesma exiba o código do caractere sob o cursor.

Trabalhando com registradores

[editar | editar código-fonte]

Você não precisa copiar e colar diferentes partes do texto para uma mesma área de transferência. Para isso, você pode usar os registradores.

Os registradores são indicados por aspas seguido por uma letra. Exemplos: "a, "b, "c, etc.

Como copiar o texto para um registrador? É simples: basta especificar o nome do registrador antes:

"add  - apaga uma linha, copiando seu conteúdo para o registrador a
"bdd  - apaga uma linha, copiando seu conteúdo para o registrador b

"ap   - "cola" o conteúdo do registrador a
"bp   - "cola" o conteúdo do registrador b

"x3dd - apaga 3 linhas, copiando seu conteúdo para o registrador x

"xp   - "cola" o conteúdo do registrador x

"ayy  - copia uma linha, sem apagar, para o registrador a
"a3yy - copia 3 linhas, sem apagar, para o registrador a

"ayw  - copia uma palavra, sem apagar, para o registrador a
"a3yw - copia 3 palavras, sem apagar, para o registrador a

No modo insert você pode usar um atalho para colar rapidamente o conteúdo de um registrador

   Control+r+(registro)

Para colar o conteúdo do registrador "a"

   Control+r+a

Para copiar a linha atual para a área de transferência

"+yy

Para colar da área de transferência

"+p

Edições complexas

[editar | editar código-fonte]

Trocando palavras de lugar: coloque o cursor no espaço antes da 1ª palavra e digite:

deep

Trocando letras de lugar:

xp

Trocando linhas de lugar:

ddp

Tornando todo o texto maiúsculo

gggUG
>> - Indenta a linha atual
^T - Indenta a linha atual em modo insert
^D - Remove indentação em modo insert
>ip - indenta o parágrafo atual

Corrigindo a indentação de códigos

[editar | editar código-fonte]

Selecione o bloco de código, por exemplo

  vip  ............. visual inner paragraph (selecione este parágrafo)
  =  ............... corrija a indentação do que selecionei :)

Usando o file explorer

[editar | editar código-fonte]

O vim navega na árvore de diretórios com o comando

 vim .

Use o "j" para descer e o "k" para subir ou Enter para editar o arquivo selecionado. Outra dica é pressionar F1 ao abrir o FileExplorer do vim, você encontra dicas adicionais sobre este modo de operação do vim.

Selecionando ou deletando conteúdo de tags html

[editar | editar código-fonte]
 <tag> conteúdo da tag </tag>
 basta usar (em modo normal) as teclas 
 vit ............... visual select inner tag

Este recurso também funciona com parênteses

 vi( ............ visual select
 vi" ............ visual select
 di( ............ delete inner (, ou seja, seu conteúdo

O vim 7 passa a ter um comando de ordenação que também retira linhas duplicadas

 :sort u ............ ordena e retira linhas duplicadas
 :sort n ............ ordena numericamente

Obs: a ordenação numeríca é diferente da ordenação alfabética se em um trecho contendo algo como:

8
9
10
11
12

Você tentar fazer:

:sort

O vim colocará nas três primeiras linhas

10
11
12

Portanto lembre-se que se a ordenação elvover números use:

:sort n

Você pode fazer a ordenação em um intervalo assim:

:1,15 sort n

O comando acima diz: ordene numericamente da linha 1 até a linha 15

Removendo linhas duplicadas

[editar | editar código-fonte]
:sort u

O arquivo alternativo

[editar | editar código-fonte]

É muito comum você editar um arquivo no vim, e inocentemente imaginar que não vai mais modificar qualquer coisa nele, você então abre um novo arquivo:

:e novo-arquivo.txt

Mas não mais que de repente você lembra "Poxa eu queria colocar mais uma linha no arquivo em que estava" Para estes casos use o atalho

CTRL-6

Dica: Este comando é booleano, ou seja, cada vez que você pressionar o atalho ele pula para o último arquivo editado!

Abrindo o último arquivo rapidamente

[editar | editar código-fonte]

O vim guarda um registro para cada arquivo editado (veja registros)

'0 ............. abre o último arquivo editado
'1 ............. abre o penúltimo arquivo editado
Ctrl-6 ......... abre o arquivo alternativo (booleano)

Bom já que abrimos o nosso último arquivo editado com o comando

'0

podemos, e provavelmente o faremos, editar no mesmo ponto em que estávamos editando da última vez

gi

Incrementando números em modo normal

[editar | editar código-fonte]

Posicione o cursor sobre um número e pressione

Ctrl-a ............. incrementa o número
Ctro-x ............. decrementa o número

Repetindo a digitação de linhas

[editar | editar código-fonte]
Ctrl-y ................ repete caractere a caractere a linha acima
Ctrl-e ................ repete caractere a caractere a linha abaixo
Ctrl-x Ctrl-l ......... repete linhas inteiras (comece a digitar e use o atalho)
Ctrl-a ................ repete a última inserção

Dicas adicionais

[editar | editar código-fonte]

Que tal abrir um arquivo já na linha 10 por exemplo?

 vim +10 /caminho/para/o/arquivo

Ou ainda abrir na linha que contém um determinado padrão?

 vim +/padrão arquivo

Obs: caso o padrão tenha espaços no nome coloque entre parênteses ou use escape "\" a fim de não obter erro.

Movendo um trecho de forma inusitada

:20,30m 0

O comando acima diz: da linha 20 até a linha trinta mova para a linha zero, ou seja, começo do arquivo.

   vip .......... adiciona seleção visual ao parágrafo atual 'inner paragraph'
   yip .......... copia o parágrafo atual
   dip .......... deleta o parágrafo atual
   "ayip ........ copia o parágrafo atual para o registro 'a'
   yit .......... copia a tag agual 'inner tag' útil para arquivos html xml

Uma calculadora diferente

[editar | editar código-fonte]

Sempre que desejar inserir um cálculo você pode usar o atalho

Ctrl-r= 
Ctrl-r=5*850

Inserindo registros rapidamente

[editar | editar código-fonte]
Ctrl-r c ....... "modo insert" insere conteúdo do registro 'c'
Ctrl-r / ....... insere ultima busca
Ctrl-r : ....... insere ultimo comando
Ctrl-r % ....... insere nome do arquivo

Na seção Buscas e substituições você encontra mais dicas de edição!