Melhore sua produtividade com dicas avançadas do editor VIM

Melhore sua produtividade com dicas avançadas do editor VIM

Intro

Continuando a série de posts sobre o VIM, irei tratar aqui sobre o uso do vim no dia a dia, em especial para desenvolvedores.

Os principais editores de texto trazem algumas comodidades, tais como: syntax highlight, edição multi-linha, mover linhas no arquivo, desfazer/refazer, visualização da árvore de diretórios, navegação por abas, pesquisa por arquivos…

E se eu disser que o VIM tem tudo isso nativamente, e com uma performance que deixa o VS Code, Atom, Sublime com inveja?

Neste post veremos cada uma dessas funcionalidades e como configurá-las no seu vim.

Syntax Hightlight

O vim, por padrão, possui uma opção chamada syntax. Você consegue ativar de forma interativa qualquer opção no vim acessando o modo de linha de comando através da tecla ESC. Para ativar o syntax highlight, basta digitar :syntax
on
e, em seguida, apertar enter.

O conjunto de cores também pode ser customizado e a opção destinada a esse tipo de configuração é a colorscheme. O vim possui alguns já pré-definidos, como o evening – basta entrar novamente no modo de linha de comando, digitar colorscheme
evening
e apertar enter.

Caso você não goste muito dos colorschemes nativos, a boa notícia é que existem muitos disponíveis na internet – basta realizar o download do colorscheme e colocar no diretório ~.vim/colors/

Numeração

O vim possui, de forma nativa, a opção de numeração de linha: no modo de comando digite set
number
:

Edição Multi-linha

Uma das funcionalidades mais comuns dos editores modernos é poder editar mais de uma linha ao mesmo tempo. Um exemplo recorrente é o ato de comentar/descomentar trechos de código.

No normal mode, aperte Ctrl
+ V
e selecione o trecho o qual você deseja comentar:

Após selecionar o texto, aperte a sequência Shift + i, em seguida digite // e aperte ESC:

Para descomentar repita o processo de seleção multilinha por bloco com a sequência Ctrl
+ V
, selecione os caracteres de comentário e aperte a tecla S:

Movendo linhas no arquivo

Para mover um trecho de código para 3 linhas abaixo, por exemplo (scroll down), selecione as linhas no modo VISUAL/LINHA com a sequência ‘Shift + V’. Feita a seleção, basta apertar ESC e inserir o comando :move +3:

Para retroceder as linhas (scroll up), devemos inverter o sinal do comando move – :move
-3
:

OK. Digitar :move e número de linhas toda vez que você precisar arrastar o seu trecho para baixo ou para cima parece pouco produtivo. Apesar de gostar de escrever os comandos, por reforçá-los na memória e não precisar customizar as configurações do VIM, esse tipo de feature pede por uma tecla de atalho.

Felizmente, o VIM é customizável. Para criar um atalho no vim, edite o arquivo ~/.vimrc e adicione ao final a seguinte configuração:


vnoremap <S-Down> :m '>+1<CR>gv=gv
vnoremap <S-Up> :m '<-2<CR>gv=gv

A instrução vnoremap  indica para o vim que, no modo VISUAL, a sequência Shift + seta para baixo e Shift + seta para cima serão remapeadas para as instruções move + 1 e move
- 2,
respectivamente, de forma não recursiva (ou seja, conseguimos mover de unidade em unidade). Dessa forma, temos mais fluidez ao movimentar nossas linhas. Para verificar esse atalho em ação, selecione o modo VISUAL do vim apertando a tecla V,  selecione as linhas que gostaria de movimentar, em seguida aperte Shift + seta para baixo algumas vezes e depois Shift + seta para cima para voltar algumas linhas:

O arquivo ~/.vimrc é como o nosso ~/.bashrc, mas para as configurações do vim:  a cada vez que o vim inicializar, ele vai carregar essas configurações no editor. Nesse sentido, podemos adicionar as configurações de syntax on, set numbers. Ao final teremos:

Árvore de diretórios

O vim possui o comando Vexplore, que abre uma janela interna de navegação, apresentando o conteúdo do diretório vigente:

A questão é que, por padrão, o comando acaba separando a janela em duas metades iguais, além de que ao abrir um arquivo, a navegação no diretório é substituída pelo próprio conteúdo do arquivo.

Nada que uma boa configuração não resolva. Adicione o trecho a seguir no seu arquivo ~/.vimrc:


let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_browse_split = 4
let g:netrw_altv = 1
let g:netrw_winsize = 25
augroup file_drawer
  autocmd!
  autocmd VimEnter * :Vexplore
augroup END

Vamos entender o que esses parâmetros querem nos dizer:

  • let g:netrw_banner =0 : aplica globalmente que o banner do navegador de diretório será escondida
  • let g:netrw_liststyle: o netrw possui 4 formas de visualização da lista de arquivos, a de número 3 é a referente à visualização em árvore
  • let g:netrw_browse_split: define o comportamento de abertura dos arquivos nas janelas.  A opção 4 define que será aberto a janela anterior (de origem)
  • let g:netrw_altv: define o tipo de separação da janela para vertical
  • let g:netrw_winsize: define o tamanho em percentagem da janela de arquivos – no caso definimos para 25%
  • bloco augroup: define que ao inicializar o vim, será executado o comando :Vexplore

Com isso temos nosso vim com árvore de diretórios preparada:

Para abrir um arquivo, basta posicionar o cursor e apertar Enter. Para navegar entre janelas, utilize o comando CRTL  + W seta para direita/esquerda.

O vim possui nativamente navegação por abas através do comando :tabnew. Quando executado sem nenhum parâmetro, ele abre uma nova aba com um novo arquivo. É possível abrir arquivos já existentes com o comando :tabnew <nome_do_arquivo>. Para navegar entre abas, o vim possui dois comandos, o :tabnext e o :tabprevious, que navegam para a próxima aba, ou voltam para a aba anterior – caso chegue à última aba, ele retorna para a primeira, e o seu inverso também é verdadeiro.

Assim como o line scrolling, a navegação entre abas pede por teclas de atalho:

nnoremap <S-Right> :tabnext<CR>
nnoremap <S-Left> :tabprevious<CR>

 

Ao apertar, no modo NORMAL do vim, a sequência Shift + seta para direita navegará para a próxima aba, e Shift + seta para esquerda retornará à primeira aba:

Pesquisando arquivos por palavra-chave

Para finalizar esse post, uma funcionalidade importante é procurar por palavras chaves na raiz de um diretório. O vim possui o comando :vimgrep,
que funciona de forma similar ao utilitário do Linux, grep.

Para realizar um teste, abra o vim sem nenhum argumento. Em seguida, troque da janela de árvore de diretórios para a janela do arquivo em branco (dica: essa operação poderia ter um atalho também, não acha?) através do comando Ctrl + W + seta para direita.

Após isso, vamos procurar no diretório vigente algum arquivo que contenha a expressão printf. Para tal, utilizaremos o seguinte comando: :vimgrep
printf *.c | copen 5

Vamos entender o que aconteceu com a execução deste comando:

  • aprimeira parte do comando é similar a um grep do Linux, ele vai buscar as ocorrências do padrão printf nos arquivos do diretório cuja extensão seja de código da linguagem C.
  • o trecho (...) |
    copen 5
    é uma diretiva para mostrar os resultados (buffer) em uma nova janela, para que você possa visualizar todas as ocorrências. Essa janela é feita a partir de um horizontal split, mas isso pode variar de acordo com o tamanho da janela.

O comportamento do vimgrep é abrir a primeira ocorrência na janela vigente. É possível configurar para que essa abertura seja em uma nova aba com a direta:set
switchbuf+=newtab
(isso também pode ir para o seu ~/.vimrc)

Referências

Muitas dessas dicas foram fruto de pesquisa, experiência própria e, claro, do conhecimento coletivo. Abaixo seguem boas referências sobre o vim:

  • Árvore de diretórios sem plugins : https://shapeshed.com/vim-netrw/
  • Entendendo as opções do netrw: https://medium.com/usevim/the-netrw-style-options-3ebe91d42456
  • Learn Vim Script the Hard Way: https://learnvimscriptthehardway.stevelosh.com/

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

Anterior Entenda a interação entre MySQL e o cache de sistema de arquivos do Linux
Próxima Entenda as diferenças entre MySQL Community, MySQL Enterprise, Percona e MariaDB

About author

Guilherme Zanelato
Guilherme Zanelato 5 posts

Guilherme Zanelato é formado em Ciências Sociais pela universidade de São Paulo e atualmente cursa Análise e Desenvolvimento de Sistemas na FATEC. Possui mais de 2 anos de experiência em desenvolvimento e 4 anos lidando com tecnologias open source. Possui a certificação PCAP - Certified Associate in Python Programming.

View all posts by this author →

Você pode gostar também

Cloud

Gerenciando entradas de DNS com Terraform e Protocolo TSIG

Terraform é uma ferramenta da Hashicorp focada em Bootstrapping e inicialização de recursos. Em comparação com Puppet , este é responsável por gerenciar a configuração de uma infraestrutura existente, já o

Infraestrutura TI

Aumente a performance do Moodle com a configuração do MUC

O que é O MUC (Moodle Universal Cache) é um tipo de cache e um cache nada mais é do que um repositório de dados, que torna mais fácil e

Cloud

Entenda o Open vSwitch e sua aplicação em nuvens públicas e privadas

Você que tem trabalhado com containers e VMs (máquinas virtuais) em nuvens públicas e privadas já deve ter ouvido falar do Open vSwitch (OVS). Ele é um switch virtual que