Vim fügt automatisch einen Kommentar ein, wenn ich eine neue Zeile aus einer auskommentierten Zeile beginne, da ich festgelegt habe formatoptions=tcroql
. Zum Beispiel (Cursor ist *
):
// this is a comment*
und nach dem Schlagen <Enter>
(Einfügemodus) oder o
(Normalmodus) habe ich Folgendes übrig:
// this is a comment
// *
Diese Funktion ist sehr praktisch, wenn Sie lange mehrzeilige Kommentare schreiben, aber oft möchte ich nur einen einzeiligen Kommentar. Wenn ich nun die Kommentarserie beenden möchte, habe ich mehrere Möglichkeiten:
- schlagen
<Esc>S
- Hit
<BS>
dreimal
Beide bieten drei Tastenanschläge, zusammengenommen <Enter>
bedeutet dies vier Tastenanschläge für eine neue Zeile, was ich für zu viel halte. Im Idealfall möchte ich nur <Enter>
ein zweites Mal treffen, um zu bleiben:
// this is a comment
*
Es ist wichtig, dass die Lösung auch mit verschiedenen Einrückungsstufen funktioniert, d. H.
int main(void) {
// this is a comment*
}
schlagen <Enter>
int main(void) {
// this is a comment
// *
}
schlagen <Enter>
int main(void) {
// this is a comment
*
}
Ich glaube, ich habe diese Funktion vor einigen Jahren in einem Texteditor gesehen, aber ich kann mich nicht erinnern, welche es war. Ist jemandem eine Lösung bekannt, die dies für mich in Vim erledigt? Hinweise in die richtige Richtung, wie ich meine eigene Lösung entwickeln kann, sind ebenfalls sehr willkommen.
quelle
Antworten:
Versuche dies:
quelle
:h 'comment'
und:h format-comment'
.#
Ruby und"
Vimscript zu arbeiten//
. Es ist nicht wirklich Sinn machen , etwas für das zu tun ,*
von C-Stil mehrzeilige Kommentare , weil es muss mit dem Ende*/
sowieso.<CR><CR>
könnte vielleicht verwendet werden, um den mehrzeiligen Kommentar zu beenden ...Ich habe @ romainls Antwort auf die Arbeit mit beliebigen Sprachen erweitert, indem ich den regulären Ausdruck aus Vims generiert habe
&commentstring
:Ich kann mich jedoch anscheinend überhaupt nicht neu zuordnen
<CR>
, dies wird einfach nicht funktionieren. Im Moment benutze ich,<CR><CR>
bis dieses Problem behoben ist.quelle
<Esc>S
?<C-u>
macht das gleiche, ohne den Einfügemodus zu verlassen. Wie auch immer, ich hatte eine benutzerdefinierte Funktion, die eine Reihe von Dingen erledigte<CR>
und sieSmartEnter()
erst gestern umbenannte, nachdem ich meine Antwort gepostet hatte ;-). Ich bin mir auch nicht sicher, ob&commentstring
es die richtige Wahl ist, da es im Allgemeinen nur eine Form enthält und "linienweise" oder "blockweise" sein kann (/*%s*/
in C,//%s
in Javascript usw.).Entfernen Sie r aus den Formatoptionen. Genau das macht diese Option. Wenn Sie es ausschalten, wird vim das nie für Sie tun, was bedeutet, dass Sie die führenden Kommentarmarkierungen hinzufügen müssen, wenn Sie sie tatsächlich möchten, aber das ist der Kompromiss.
quelle
formatoptions