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

Desenvolvimento

Descubra os benefícios e vantagens do Zend Framework 2 para desenvolvimento PHP

Se você está lendo este artigo provavelmente você ja desenvolveu ou pretende desenvolver algum projeto de software, talvez você nunca tenha usado um framework antes por isso acho necessário uma

Infraestrutura TI

Workshop Infraestrutura Ágil: Conheça as ferramentas DevOps da 4Linux

No dia 10/11/2016, aconteceu na sede da 4linux em São Paulo o workshop “Infraestrutura Ágil”. A procura foi grande pois o público estava muito interessado em ouvir sobre  DOCKER, GIT,

Big Data

Conexão com Cluster Kafka Hospedado em Kubernetes: Guia Completo

Nesse artigo vamos discutir questões relacionadas a como disponibilizar um cluster kafka hospedado em um k8s para aplicações que estejam hospedadas fora do cluster kubernetes. Não vamos tratar da instalação