Tente isto:
function! EnterEnter()
if getline(".") =~ '^\s*\(//\|#\|"\)\s*$'
return "\<C-u>"
else
return "\<CR>"
endif
endfunction
imap <expr> <CR> EnterEnter()
O Vim insere automaticamente um comentário quando inicio uma nova linha a partir de uma linha comentada, porque defini formatoptions=tcroql
. Por exemplo (o cursor é *
):
// this is a comment*
e depois de atingir <Enter>
(modo de inserção) ou o
(modo normal), fica com:
// this is a comment
// *
Esse recurso é muito útil ao escrever comentários de várias linhas, mas muitas vezes eu só quero um comentário de linha única. Agora, se eu quiser terminar a série de comentários, tenho várias opções:
<Esc>S
<BS>
três vezes Ambos fornecem três pressionamentos de teclas, em conjunto com o <Enter>
, o que significa quatro pressionamentos de teclas para uma nova linha, o que eu acho que é demais. Idealmente, gostaria de acertar <Enter>
pela segunda vez para ficar com:
// this is a comment
*
É importante que a solução também trabalhe com diferentes níveis de recuo, ou seja,
int main(void) {
// this is a comment*
}
clique em <Enter>
int main(void) {
// this is a comment
// *
}
clique em <Enter>
int main(void) {
// this is a comment
*
}
Eu acho que vi esse recurso em algum editor de texto há alguns anos, mas não me lembro qual deles era. Alguém está ciente de uma solução que vai fazer isso por mim no Vim? Os ponteiros na direção certa sobre como implementar minha própria solução também são muito bem-vindos.
Eu estendi a resposta do @romainl para trabalhar com linguagens arbitrárias gerando o regex do &commentstring
do Vim:
function! s:IsOnlyComment(getlineArg)
let commentRegex='^\s*'.substitute(&commentstring,'%s','\s*','').'$'
return strlen(matchstr(getline(a:getlineArg), commentRegex)) > 0
endfunction
function! SmartEnter()
if s:IsOnlyComment('.')
return "\<Esc>S"
else
return "\<CR>"
endif
endfunction
inoremap <expr> <CR> SmartEnter()
No entanto, não consigo remapear <CR>
, mas isso não funciona. Por enquanto, eu uso <CR><CR>
até que esse problema seja resolvido.
Remova r de "formatações". Isso é o que essa opção faz. Desligá-lo significa que você nunca obterá o vim fazendo isso por você, o que significa que você precisará adicionar os marcadores de comentário principais quando realmente quiser, mas essa é a troca.