Vim insère automatiquement un commentaire lorsque je commence une nouvelle ligne à partir d'une ligne commentée, car je l'ai définie formatoptions=tcroql
. Par exemple (le curseur est *
):
// this is a comment*
et après avoir frappé <Enter>
(mode insertion) ou o
(mode normal) je me retrouve avec:
// this is a comment
// *
Cette fonctionnalité est très pratique lors de l'écriture de longs commentaires sur plusieurs lignes, mais souvent je veux juste un commentaire sur une seule ligne. Maintenant, si je veux terminer la série de commentaires, j'ai plusieurs options:
- frappé
<Esc>S
- frappé
<BS>
trois fois
Les deux offrent trois touches, combinées avec <Enter>
cela signifie quatre touches pour une nouvelle ligne, ce qui, je pense, est trop. Idéalement, je voudrais juste frapper <Enter>
une deuxième fois pour me retrouver avec:
// this is a comment
*
Il est important que la solution fonctionne également avec différents niveaux d'indentation, c.-à-d.
int main(void) {
// this is a comment*
}
frappé <Enter>
int main(void) {
// this is a comment
// *
}
frappé <Enter>
int main(void) {
// this is a comment
*
}
Je pense avoir vu cette fonctionnalité dans un éditeur de texte il y a quelques années, mais je ne me souviens pas laquelle. Quelqu'un connaît-il une solution qui me permettra de le faire à Vim? Des conseils dans la bonne direction sur la façon de déployer ma propre solution sont également les bienvenus.
la source
Réponses:
Essaye ça:
la source
:h 'comment'
et:h format-comment'
.#
rubis et le"
vimscript en plus du classique//
. Cela n'a pas vraiment de sens de faire quoi que ce soit pour les*
commentaires multilignes de style C, car cela doit se terminer de*/
toute façon.<CR><CR>
-être pourrait être utilisé pour terminer le commentaire multiligne ...J'ai étendu la réponse de @ romainl pour travailler avec des langages arbitraires en générant l'expression régulière à partir de Vim
&commentstring
:Cependant, je n'arrive pas du tout à remapper
<CR>
, cela ne fonctionnera tout simplement pas. Pour l'instant, j'utilise<CR><CR>
jusqu'à ce que ce problème soit résolu.la source
<Esc>S
?<C-u>
fait de même sans quitter le mode d'insertion. Quoi qu'il en soit, j'avais une fonction personnalisée qui a fait un tas de choses<CR>
etSmartEnter()
je l'ai renommée juste hier après avoir posté ma réponse ;-). De plus, je ne suis pas sûr que ce&commentstring
soit le bon choix car il ne contient généralement qu'un seul formulaire et il peut être "linewise" ou "blockwise" (/*%s*/
en C,//%s
en Javascript, etc.).Supprimez r de 'formatoptions. C'est ce que fait cette option. Si vous le désactivez, vous n'aurez jamais à faire cela pour vous, ce qui signifie que vous devrez ajouter les principaux marqueurs de commentaire lorsque vous en aurez réellement besoin, mais c'est le compromis.
la source
formatoptions