Como copiar, recortar e colar no editor Vim

Copiar uma parte do texto em um arquivo, para usar em outros locais ajuda a poupar tempo e digitação.
Copiar/colar ou recortar/colar são funções existentes no Vim, que muitos novatos desconhecem.

Ambas estão ali, presentes, e são fáceis de usar.
Abra o Vim, com um texto qualquer, que você possa usar para fazer testes e experimente os exemplos que seguem.

Como recortar e colar texto no Vim

Esta função faz (re)uso de outras 2 funções do editor:

  1. os comandos de apagar uma linha, uma palavra, um caractere e
  2. o buffer (memória intermediária) do Vim, onde é guardado o conteúdo descartado.

Basicamente, a operação de recortar/colar consiste de “apagar” primeiro e, depois, recuperar o texto do buffer.

Veja 3 exemplos básicos de como apagar (recortar, neste caso) texto, no modo comando do Vim:

  • ‘dd’, recorta a linha (atual) em que o cursor se encontra
  • ‘dw’, recorta a palavra que se encontra à direita do cursor ou ‘db’, recorta a palavra à esquerda
  • ‘3d’, recorta 3 linhas inteiras

O comando ‘p’ é usado para inserir o conteúdo do buffer no texto.
Depois de recortar o que queria, basta posicionar o cursor no ponto em que deseja colar o texto “apagado” e pressionar ‘p’ — para reinserir o conteúdo do buffer.
Se quiser, é possível multiplicar a quantidade de vezes em que é reinserido.
Tecle ‘5p’, por exemplo, para inserir o conteúdo do buffer 5 vezes.

copiar e colar com o editor Vim

Como copiar e colar no editor Vim

Para copiar conteúdo, use o comando ‘y’ (yank).
Veja alguns exemplos:

  • ‘yy’, para copiar a linha atual
  • ‘yw’, para copiar a próxima palavra. Se quiser copiar as próximas 3 palavras, use ‘y3w’
  • ‘y$’, para copiar do ponto atual até o final da linha

Depois de copiado, basta mover o cursor para o local, no texto, em que deseja inserir o conteúdo do buffer e teclar ‘p’.

Como gravar arquivos criptografados com o Vim

O editor de textos Vim tem suporte a diversos métodos de criptografia.
É possível guardar código ou qualquer outro texto (como senhas ou outras informações sensíveis) longe de olhares curiosos.

Uma vez criptografado, o texto não pode mais ser lido, sem a chave correta.
Tenha isto em mente, antes de usar este tipo de segurança em um arquivo — pra não ficar “trancado do lado de fora”.
Você pode enviar o texto codificado para outras pessoas, que usem o Vim no Windows ou no MacOS.
Se elas tiverem a senha para descriptografar, poderão ler o conteúdo da mensagem.

Para ativar a criptografia, a qualquer momento, use o comando ‘:X’.
Forneça a senha e a confirmação.
A criptografia será aplicada na hora de gravar o arquivo (:w).

criptografia no vim

É possível já abrir um arquivo com a criptografia ativada:

vim -x meu-arquivo-secreto.txt

Após este comando, o Vim iniciará pedindo uma nova chave de segurança para o seu arquivo.
Na próxima vez em que for abrir o arquivo, não precisa usar ‘-x’:

vim meu-arquivo-secreto.txt

Cuidados com a segurança criptográfica no Vim

Além de não perder a sua senha e usar, também, uma senha decente, há outros aspectos a levar em consideração, caso você se preocupe realmente com a sua segurança.
Quando tentar abrir o seu arquivo, só conseguirá ver um monte de caracteres desconexos.
texto criptografado

Tanto o texto contido no swap, quanto o do arquivo undo (usado para desfazer ações dentro do editor), são guardados sob criptografia.

Talvez não seja paranoia, mas a gente tem que falar sobre isso…
A codificação dos arquivos de swap e do undo são feitas bloco a bloco — fator que pode ajudar a reduzir o tempo necessário para um invasor quebrar sua senha.
Portanto, se quiser segurança extra, desative o swap e o undo (desfazer) para o arquivo.
Para desativar o recurso de swapping do Vim, entre no modo de comando (tecla ESC) e execute o seguinte:

:noswapfile

O comando abaixo, inicia a edição do arquivo ‘meus_segredos.txt’, com o swap desativado:

:noswapfile edit meus_segredos

Use o que achar melhor.
O lado ruim desta ação é que você pode perder texto, que ainda não tenha sido gravado, caso ocorra alguma queda de energia ou travamento no sistema operacional.
Já o arquivo undo pode ser desativado sem maiores problemas:

:set noundofile

Veja outros procedimentos adicionais (opcionais) de segurança que você pode adotar.
Para desativar também o backup automático:

:set nobackup

Para desativar o arquivo temporário:

:set nowritebackup

Para desativar a criptografia de um arquivo use o comando:

:set key=

Você também pode desativar o viminfo, que oferece informações sobre a sessão atual:

:set viminfo=

Quais métodos de criptografia estão disponíveis para o Vim

Você pode usar a opção ‘cryptmethod‘ (ou cm) para selecionar o tipo de criptografia a ser usado:

  1. zip: método mais fraco, porém rápido e mais difundido. Tem maior compatibilidade.
  2. blowfish: método mais seguro que o anterior.
  3. blowfish2: método atualizado e com segurança média para forte. É recomendado pela documentação oficial do Vim.

Para escolher o método de criptografia blowfish2, use o seguinte comando no Vim:

:setlocal cm=blowfish2

Você precisa fazer esta opção antes de começar a escrever no arquivo.
Quando você for abrir um arquivo, o Vim detecta automaticamente o método usado para criptografá-lo.
Você pode alterar o cryptmethod, ao abrir um arquivo, antes de começar editar.
Para definir permanentemente o método ou qualquer outro ajuste de que falamos neste post, edite o arquivo de configuração vimrc.

Como saber se a minha versão do Vim tem suporte a criptografia

Se você efetuou a instalação do aplicativo a partir dos repositórios oficiais da sua distro, não há muito o que fazer. E o suporte provavelmente já estará lá.
Alguns usuários preferem baixar e compilar o código fonte — entre outras coisas, isto lhes dá acesso a uma versão mais atual do aplicativo.
Neste caso, pode ser necessário compilar com a opção ‘cryptv’ selecionada.
Use a opção ‘–version’, combinada ao comando grep, para saber se a sua versão tem suporte a criptografia:


vim --version | grep crypt

Se o +cryptv estiver presente, então está tudo ok com a sua versão.

vim version

Referências

Como considerações finais, tenha cuidado para não começar a editar (e gravar em seguida) um arquivo criptografado, que você não descodificou adequadamente. Todo o conteúdo do arquivo será perdido, caso você o faça.
Lembre-se que o texto armazenado na memória não é criptografado.
Isto significa que o administrador do seu sistema, tecnicamente, poderá ler o seu conteúdo, enquanto você o estiver editando.
O manual do Vim também informa que, em uma máquina antiga (32 bit) é possível quebrar uma senha de 6 caracteres em menos de 1 dia, por força bruta, no caso de usar o cryptmethod zip.
Você pode iniciar o Vim com criptografia ativada e o swap desligado, com as seguintes opções:


vim -xn meuarquivo.txt

Leia mais:
https://linux-audit.com/using-encrypted-documents-with-vim/.

Como mover o cursor dentro do editor Vim

Fora do modo de inserção (i), dentro do modo de comando (Esc), é possível movimentar o cursor através das teclas direcionais do seu teclado ou usando teclas de comando para isto.
As teclas direcionais são as setinhas

 ↓   →   ←   ↑

Há também as teclas de comando:

  • h ← move o cursor um caractere para a esquerda
  • j ↓ move o cursor uma linha para baixo
  • k ↑ move o cursor uma linha para cima
  • l → move o cursor um caractere para a direita

As teclas de movimentação do cursor vão muito além disto no Vim.
Além de poder “andar” um caractere de cada vez, também há comandos para:

  1. se mover entre blocos de texto, como palavras, sentenças ou parágrafos
  2. se mover entre telas de um mesmo arquivo

Por que usar as teclas de comando em vez das direcionais do teclado?

Não se esqueça: tudo no Vi ou no Vim, é pensado para a máxima produtividade de quem digita.
Claro que “o que é produtivo e satisfatório para um, pode não ser para outro”.
Cabe a você decidir se vale a pena incorporar uma maneira nova de fazer as coisas ou não.
Aprender a usar este método de movimentação dentro do texto, vai tomar alguns minutos ou talvez mais.
Ao se permitir o aprendizado, você pode perceber que ele poupa tempo, no modo de comando.
A principal vantagem é que este caminho possibilita posicionar o cursor aonde você quiser no texto, sem precisar retirar a mão do centro do teclado.

Use valores numéricos para ter mais controle sobre a movimentação

Você pode indicar por quantos caracteres ou linhas o cursor irá se mover, dentro do seu texto.
Veja estes exemplos:

  1. 4l — o comando faz o cursor ‘andar’ 4 espaços para a direita
  2. 5j — o comando faz o cursor se mover 5 linhas para cima

Desta maneira, o Vim oferece meios de multiplicar os efeitos de um comando antes de sua execução.

Mais comandos para mover o cursor no Vim

Para se movimentar por entre blocos de texto, use os seguintes comandos de teclado:

  • 0 — (zero) para ir para o início de uma sentença ou parágrafo. Equivale a Home.
  • $ — para ir para o final de um parágrafo. Equivale a End.
  • w — (word) se move uma palavra de cada vez para frente.
  • b — (backwards?) se move uma palavra de cada vez para trás.
  • – — sobe uma linha.
  • + — desce uma linha.

Obviamente, as teclas + e – fogem daquele objetivo de realizar uma movimentação mais natural no teclado.

Uma linha, no Vim, não é a mesma coisa que a sua representação visível, na tela, com 80 colunas.
Uma linha é um bloco de texto compreendido entre uma quebra de linha e outra.
Em outras palavras, começa com um Enter e termina no próximo Enter.

Em todas estas teclas é possível acrescentar argumentos numéricos para multiplicar os efeitos de cada comando. Por exemplo:

  1. 4b — para mover 4 palavras para trás
  2. 5- — para subir 5 linhas

Você pode usar o comando G para ir até o fim do arquivo.
Com argumentos numéricos, é possível dizer ao comando G exatamente em que linha o cursor deve ficar.
Desta forma, 1G leva o cursor para o início do arquivo e 42G leva até a linha 42.

erro na linha 15
Quando você está tentando executar um script ou compilar código, frequentemente pode se deparar com avisos de erros.
Os avisos podem indicar exatamente em que linha do seu programa há alguma inconsistência.

Leia mais sobre o editor Vim.

As teclas de comando do editor vim

Quando não estiver escrevendo texto ou editando código no Vi ou no Vim, o modo de comando pode ser ativado, com o pressionamento da tecla ESC.
Neste modo, é que realizamos operações de arquivo ou de texto.

Tenho por hábito, quando paro para pensar sobre o que estou a escrever, sair do modo de edição e gravar o meu trabalho.
Esta prática é recomendada por vários autores.

Se quiser se aprofundar no assunto, sugiro ler mais no site ou dar uma olhada no excelente tutorial do Guru99 (in english).
O Vi tem basicamente 2 modos de operação:

  1. Modo de comando — é o modo padrão. Quando entramos no vim, ele já se encontra no modo de comando.
    Além disso, sempre que quiser voltar a este modo, pressione a tecla ‘ESC’.
    O command mode é voltado para realizar tarefas, como:

    • mover e posicionar o cursor dentro do texto.
    • copiar, cortar e colar blocos de texto.
    • gravar seu arquivo atual, gravar com um novo nome, abrir um novo, sair do editor, alterar o tema da sintaxe etc.

    Os comandos dados são sensíveis à caixa. Ou seja, ‘:wq’ é diferente de ‘:WQ’. Fique atento a isto.

  2. Modo de inserção — voltado para escrever e inserir texto.
    Você pode entrar nele, com o pressionamento da tecla ‘i’ (de insert ou inserir).
    Também é possível iniciar o modo de inserção com as teclas:

    • a — começa a inserção após (after) ou depois da posição do cursor.
    • A — começa a inserção ao final da linha atual.

Apesar de gostar da grande quantidade de recursos das IDEs — sou fã da Komodo IDE e da Netbeans — nada substitui a velocidade de um editor como o vi.
Para pequenos blocos de código ou pequenos projetos, é sempre a minha escolha.

Agora, tecle ‘ESC’ e acompanhe a tabela de comandos do Vim, que segue, abaixo:

Teclas Ação
u Desfaz (undo) a última ação.
U Desfaz as últimas ações na linha atual.
o Inicia (open ou abre) uma nova linha e entra no modo de inserção automaticamente.
dd A sequência apaga a linha atual (que se encontra sob o cursor).
3dd Apaga 3 linhas de uma vez.
D Apaga o conteúdo da linha, após o cursor.
C Apaga o conteúdo da linha, após o cursor e inicia o modo de inserção de conteúdo.
dw Apaga uma palavra à direita.
4dw Apaga 4 palavras à direita.
cw Permite alterar a palavra sob o cursor.
x Apaga o caractere sob o cursor.
r Substitui um caractere.
R Inicia o modo de sobrescrita a partir da posição atual do cursor.
s Substitui o caractere na posição do cursor e continua a edição em modo de inserção.
S Começa a inserção na linha atual, substituindo o seu conteúdo.
~ (til) Altera a caixa do caractere sob o cursor.

Como movimentar o cursor dentro do vim

Além das teclas direcionais do teclado, que você já conhece ← ↓ ↑ →, é possível usar também, nas mesmas funções as teclas k,j,h e l:
No modo de comando (ainda):

Teclas Ação
h Movimenta o cursor para a esquerda.
j Movimenta o cursor para baixo.
k Movimenta o cursor para cima.
l Movimenta o cursor para a direita.

Como gravar e fechar o arquivo

Por fim, veja como gravar as alterações feitas no arquivo e fechá-lo.

Teclas Ação
shift + zz Grava o arquivo e fecha o vim.
:w Apenas grava o arquivo e o mantém aberto.
:q Fecha, sem gravar nada.
:q! Fecha (à força), sem gravar nada.
:wq Grava o arquivo e fecha o vim.

Referências

Mais posts sobre o Vim editor: https://elias.praciano.com/?s=vim+editor.
Site do Guru99: https://www.guru99.com/the-vi-editor.html

Por que eu uso o Vim para programar.

Já experimentei várias IDEs de programação e ainda uso algumas, entre editores de textos variados.

Se alguém me perguntar qual editor uso para escrever código, a resposta é “Muitos!”.

Mas um deles sempre me cativou mais e é a quem sempre recorro quando vou dar continuidade a algum trabalho, dar alguns retoques em algum pedaço de código e editar arquivos de configuração do sistema.

O nome dele é Vim (ou Vi) e, embora não seja a única (como já disse), é a minha principal opção de editor de código.

Recentemente topei com o post do Casper Beyer, em que ele explica por que também prefere usar o Vim para programar.

Me senti tipo… “Poxa! Não sou o único maluco do pedaço”. 😉 Faço minhas as palavras do Casper:

A principal razão para usar o Vim é o costume — e não por que não sei sair dele.

A filosofia por trás da construção do Vim, não é apenas a leveza. Tanto isto é verdade, que as estatísticas vão mostrar que o Nano, muitas vezes, bate o Vim, neste quesito.

A ideia do Vim é oferecer uma experiência de agilidade para desenvolvedores — oferecendo uma gama de comandos que podem ser dados sem a necessidade de afastar as mãos do centro do teclado.

gvim text editor screen capture

Desde que comecei a usar o Linux, me acostumei a abrir pequenos arquivos de código ou de configurações do sistema dentro dele, em vez de ficar a esperar “séculos” que o editor GUI (interface gráfica) aparecesse na tela.

Na CLI, ele é leve, pequeno e está bem longe de ser um programa ruim. Pelo contrário, podemos usar extensões e plugins para aumentar as suas funcionalidades.

gvim text editor screen capture

Saber usar bem este programa, vai também ajudar quando você tiver que se conectar a algum servidor remoto via SSH — onde é possível que o vi (irmão mais velho do Vim) e o Nano sejam as únicas opções de editores disponíveis.

Quem usa computadores com restrição de recursos, vai entender bem melhor alguns dos argumentos, aqui.

A possibilidade de aumentar as funcionalidades, através de extensões e a velocidade com que o editor trabalha são as razões mais importantes, pra mim.

O visual é uma questão de gosto pessoal. E eu gosto do “visu” espartano dele.

vim text editor screen capture
O Gvim é uma versão GUI do editor.

Em seu artigo, Beyer propõe um teste. Carregar um arquivo com o seguinte código (em linguagem C), em vários editores, para comparar desempenhos:

#include 

int main() {
  printf("Hello, world!\n");
}

Eu obtive os seguintes números, relativos ao tempo total de carregamento e finalização do aplicativo, em segundos:

  1. Nano: 0,45s
  2. Vim: 0,47s
  3. Komodo Editor: 8,257s

Como você pode observar, o Nano consegue ser ainda mais rápido do que o Vim.

E a diferença entre o tempo de abertura destes dois para o do Komodo Editor, é brutal.

Consumo de memória do Vim

E o consumo de memória?

O código, acima, ocupa 66 bytes no disco do meu sistema. Veja os valores atingidos com o uso de cada editor:


ps aux | grep "hello.c"

justinc+ 16719 11.7  3.0 958240 242980 pts/1   Sl   16:32   0:09 /opt/Komodo-Edit-11/bin/komodo hello.c
justinc+ 16720  0.1  0.0  33140  7112 pts/1    T    16:32   0:00 vim hello.c
justinc+ 16721  0.0  0.0  15060  2640 pts/1    T    16:32   0:00 nano hello.c

O resultado exibe o consumo de memória na 4a coluna, da esquerda para a direita.

Assim, temos um consumo de 3.0 MB para o komodo, enquanto o Nano e o Vim nem “mexem os ponteiros”.

O ps não é perfeito para medir o consumo de memória de aplicativos mas o objetivo, aqui, é só estabelecer uma comparação.

Veja os resultados obtidos com o pmap:


pmap -x 16866 16969 16970 | grep total

total kB          973988  237952  155584
total kB           41932    7792    2892
total kB           23952    3736     960

Pela ordem, acima, temos os números (em KB), na segunda coluna, referentes ao Komodo, ao Vim e ao Nano.

Este último é o preferido de muita gente, em termos de editores em CLI, além de estar presente em quase todas as distribuições GNU/Linux.

Estes números só reforçam o quanto é ridículo usar um editor com um consumo de memória tão massivo.

Conclusão

Além do Komodo, como editor para GUI do Linux, uso também o Atom e o Netbeans (IDE).
Acho-os incríveis e vou continuar a tê-los instalados no meu sistema, para quando eu lembrar de usá-los.

O preferido, contudo, continua a ser o Vim.
A lógica pela qual o programa foi construído é fantástica: dar o máximo de produtividade para o desenvolvedor. Todas as funções que se precisa, devem estar ao alcance dos dedos.

Ele dispensa você da necessidade de tirar a mão de cima do teclado, para pegar no mouse — embora tenha completo suporte ao dispositivo tanto na edição para GUI quanto para a CLI.

Você pode levar algum tempo para conhecer e memorizar os comandos e as teclas de atalho do Vim — da mesma forma como vai levar algum tempo para dominar qualquer outro editor.
A diferença é que, com o Vim, você será premiado com mais eficiência e produtividade no final.

Comente sobre o que você acha deste editor.
Prefere mais agilidade e velocidade para editar ou prefere a comodidade de uma grande IDE?

Leia outros artigos sobre o Vim.