Vim inserta automáticamente un comentario cuando comienzo una nueva línea desde una línea comentada, porque lo he configurado formatoptions=tcroql
. Por ejemplo (el cursor es *
):
// this is a comment*
y después de presionar <Enter>
(modo de inserción) o o
(modo normal) me queda:
// this is a comment
// *
Esta característica es muy útil al escribir comentarios largos de varias líneas, pero a menudo solo quiero un comentario de una sola línea. Ahora, si quiero finalizar la serie de comentarios, tengo varias opciones:
- golpear
<Esc>S
- golpear
<BS>
tres veces
Ambos ofrecen tres pulsaciones de teclas, junto con <Enter>
esto significa cuatro pulsaciones de teclas para una nueva línea, lo que creo que es demasiado. Idealmente, me gustaría golpear <Enter>
una segunda vez para quedarme con:
// this is a comment
*
Es importante que la solución también funcione con diferentes niveles de sangría, es decir
int main(void) {
// this is a comment*
}
golpear <Enter>
int main(void) {
// this is a comment
// *
}
golpear <Enter>
int main(void) {
// this is a comment
*
}
Creo que he visto esta característica en algún editor de texto hace unos años, pero no recuerdo cuál era. ¿Alguien sabe de una solución que haga esto por mí en Vim? Los punteros en la dirección correcta sobre cómo lanzar mi propia solución también son muy bienvenidos.
fuente
Respuestas:
Prueba esto:
fuente
:h 'comment'
y:h format-comment'
.#
ruby y el"
vimscript además del clásico//
. Realmente no tiene sentido hacer nada por los*
comentarios multilínea de estilo C porque debe terminar con el de*/
todos modos.<CR><CR>
podría usarse para terminar el comentario multilínea ...Extendí la respuesta de @ romainl para trabajar con lenguajes arbitrarios generando la expresión regular de Vim
&commentstring
:Sin embargo, parece que no puedo reasignar
<CR>
en absoluto, esto simplemente no funcionará. Por ahora, lo uso<CR><CR>
hasta que se resuelva este problema.fuente
<Esc>S
?<C-u>
hace lo mismo sin salir del modo de inserción. De todos modos, tenía una función personalizada que hacía un montón de cosas<CR>
y la renombréSmartEnter()
solo ayer después de publicar mi respuesta ;-). Tampoco estoy seguro de que&commentstring
sea la opción correcta, ya que generalmente solo contiene un formulario y puede ser "en línea" o "en bloque" (/*%s*/
en C,//%s
en Javascript, etc.).Eliminar r de 'formatoptions. Eso es lo que hace esa opción. Desactivarlo significará que nunca tendrás vim haciendo eso por ti, lo que significa que tendrás que agregar los marcadores de comentarios principales cuando realmente los quieras, pero eso es una compensación.
fuente
formatoptions