Vim/Editando
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'
Exemplos
[editar | editar código-fonte]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
Indentando
[editar | editar código-fonte]>> - 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
Ordenando
[editar | editar código-fonte]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
Veja também
[editar | editar código-fonte]Na seção Buscas e substituições você encontra mais dicas de edição!