Eu quero que o Vim continue /*...*/ comentários na próxima linha inserindo automaticamente o líder de comentários, mas finalizando // comentários depois de uma única linha.
O wiki do Vim recomenda:
autocmd FileType c,cpp setlocal comments-=:// comments+=f://
Mas isso faz com que a chave de entrada em uma linha com um comentário // indente a próxima linha até onde estava o texto do comentário na linha anterior, o que é incorreto. Isso ocorre devido ao comportamento da opção f para comments , conforme documentado na ajuda do Vim:
f Only the first line has the comment string. Do not repeat comment on
the next line, but preserve indentation (e.g., a bullet-list).
O que eu quero é o comportamento de f , mas não preservando o recuo no estilo de uma lista com marcadores. Quando eu desço para a próxima linha de um linha única // comentário, quero estar no mesmo nível do recuo real do código. Isso é possível apenas ajustando a configuração? Preciso substituir minha ligação de chave de inserção por uma função sofisticada para desfazer o recuo?
Uma não solução é remover // de comments alltogether. Isso não funcionará porque impede que // comentários sejam reempacotados corretamente com gq , porque gq confia em comments para saber quais líderes de comentários filtrar o texto que está envolvendo.
Outra coisa que não posso fazer é setlocal formatoptions-=r , porque isso desativa a inserção de líderes de comentários, mesmo para /*...*/ comentários.
Isso é semelhante a Vim: comentário automático na nova linha , procurando uma maneira rápida de sair do modo de inserção // , exceto que eu não quero ter o // inserido em tudo.