O NERD Commenter é uma das ferramentas mais robustas para manipulação de comentários no ecossistema Vim. Ele oferece suporte nativo a uma vasta gama de linguagens de programação e permite uma customização profunda do comportamento dos delimitadores.
Instalação e Configuração Inicial
Para integrar o plugin ao seu ambiente, recomenda-se o uso de um gerenciador de pacotes como o vim-plug. Adicione a seguinte linha ao seu arquivo de configuração (.vimrc ou init.vim):
" Utilizando vim-plug
Plug 'preservim/nerdcommenter'
" Configuração essencial para detectar tipos de arquivo
filetype plugin on
Comandos e Atalhos de Teclado
Por padrão, o plugin utiliza a tecla <leader> (geralmente mapeada para a barra invertida \) seguida de um prefixo de comando. Abaixo estão as operações fundamentais:
- <leader>cc: Aplica o comentário na linha atual ou no bloco selecionado em modo visual.
- <leader>cu: Remove os delimitadores de comentário da seleção atual.
- <leader>c<space>: Alterna o estado de comentário. Se a linha estiver comentada, ela será limpa; caso contrário, será comentada.
- <leader>ci: Inverte o estado de cada linha individualmente dentro de uma seleção.
- <leader>cs: Cria um bloco de comentário com um layout formatado ("sexy mode"), ideal para documentação de funções.
- <leader>cA: Insere os delimitadores no final da linha atual e entra em modo de inserção.
Customização de Comportamento
O NERD Commenter pode ser ajustado através de variáveis globais para melhor se adequar ao seu fluxo de trabalho. Insira estas definições no seu script de configuração:
" Adicionar um espaço após os delimitadores de comentário
let g:NERDSpaceDelims = 1
" Utilizar sintaxe compacta para comentários multi-linha estilizados
let g:NERDCompactSexyComs = 1
" Alinhamento dos delimitadores à esquerda em vez de seguir a indentação do código
let g:NERDDefaultAlign = 'left'
" Permitir comentar linhas que estejam vazias (útil para manter a estrutura de blocos)
let g:NERDCommentEmptyLines = 1
" Habilitar o corte de espaços em branco ao remover comentários
let g:NERDTrimTrailingWhitespace = 1
Definição de Delimitadores Customizados
Caso trabalhe com uma linguagem não suportada nativamente ou deseje alterar os símbolos padrão, você pode definir delimitadores personalizados via g:NERDCustomDelimiters:
let g:NERDCustomDelimiters = {
\ 'python': { 'left': '#', 'right': '' },
\ 'javascript': { 'left': '//', 'right': '', 'leftAlt': '/*', 'rightAlt': '*/' },
\ 'meu_formato_custom': { 'left': '@@', 'right': '@@' }
\ }
Mapeamentos Personalizados
Muitos desanvolvedores preferem atalhos que simulem IDEs modernas. Você pode remapear as funções do plugin para combinações mais intuitivas:
" Mapear Ctrl + / para alternar comentários (comum em VS Code/IntelliJ)
nmap <C-_> <Plug>NERDCommenterToggle
vmap <C-_> <Plug>NERDCommenterTogglegv
Lógica de Detecção e Aninhamento
O plugin implementa algoritmos heurísticos para identificar comentários reais, evitando confusões com strings que contenham os mesmos caracteres dos delimitadores. Além disso, ele gerencia comentários aninhados utilizando marcadores temporários, o que previne erros de sintaxe ao comentar blocos de código que já possuem comentários internos.