Solución:
Para esas tareas utilizo la mayor parte de la selección de bloques de tiempo.
Pon tu cursor en el primero #
personaje, prensa controlV (o controlQ para gVim), baje hasta la última línea comentada y presione X, eso eliminará todos los #
caracteres verticalmente.
Para comentar un bloque de texto es casi lo mismo:
- Primero, vaya a la primera línea que desea comentar, presione controlV. Esto pondrá al editor en el
VISUAL BLOCK
modo. - Luego use la tecla de flecha y seleccione hasta la última línea
- Ahora presiona CambioI, que pondrá al editor en
INSERT
modo y luego presione #. Esto agregará un hash a la primera línea. - Entonces presione Esc (dale un segundo), e insertará un
#
carácter en todas las demás líneas seleccionadas.
Para la versión simplificada de vim enviada con debian / ubuntu por defecto, escriba : s/^/#
en su lugar, en el tercer paso (cualquier resaltado restante del primer carácter de cada línea se puede eliminar con :nohl
).
Aquí hay dos grabaciones en pantalla pequeña para referencia visual.
Comentario:
Descomentar:
Para comentar bloques en vim:
- prensa Esc (salir de la edición u otro modo) a.
- pegar control+v (modo de bloqueo visual)
- utilizar el ↑/↓ teclas de flecha para seleccionar las líneas que desee (no resaltará todo, ¡está bien!)
- Cambio+I (I mayúscula)
- inserte el texto que desee, p. ej.
%
- prensa EscEsc
Para descomentar bloques en vim:
- prensa Esc (salir de la edición u otro modo) a.
- pegar control+v (modo de bloqueo visual)
- utilizar el ↑/↓ teclas de flecha para seleccionar las líneas para descomentar.
Si desea seleccionar varios caracteres, use uno o combine estos métodos:
- use las teclas de flecha izquierda / derecha para seleccionar más texto
- para seleccionar fragmentos de uso de texto cambio + ←/→ Tecla de flecha
-
puede presionar repetidamente las teclas de eliminación a continuación, como un botón de eliminación normal
- prensa D o X para borrar caracteres, repetidamente si es necesario
A veces estoy encerrado en una caja remota donde mis complementos y .vimrc no pueden ayudarme, o algunas veces NerdCommenter se equivoca (por ejemplo, JavaScript incrustado dentro de HTML).
En estos casos, una alternativa de baja tecnología es el integrado norm
comando, que simplemente ejecuta cualquier comando vim arbitrario en cada línea en su rango especificado. Por ejemplo:
Comentar con #
:
1. visually select the text rows (using V as usual)
2. :norm i#
Esto inserta “#” al comienzo de cada línea. Tenga en cuenta que cuando escriba: el rango se completará, por lo que realmente se verá como :'<,'>norm i#
Descomentar #
:
1. visually select the text as before (or type gv to re-select the previous selection)
2. :norm x
Esto elimina el primer carácter de cada línea. Si hubiera usado un comentario de 2 caracteres como // entonces simplemente lo haría :norm xx
para eliminar ambos caracteres.
Si los comentarios están sangrados como en la pregunta del OP, entonces puede anclar su eliminación de esta manera:
:norm ^x
lo que significa “ir al primer carácter que no sea un espacio, luego eliminar un carácter”. Tenga en cuenta que, a diferencia de la selección de bloques, esta técnica funciona incluso si los comentarios tienen una sangría desigual.
Nota: Ya que norm
es, literalmente, ejecutar comandos vim regulares, no está limitado a los comentarios, también puede hacer algunas ediciones complejas en cada línea. Si necesita el carácter de escape como parte de su secuencia de comandos, escriba ctrl-v y luego presione la tecla de escape (o incluso más fácil, simplemente grabe una macro rápida y luego use norm para ejecutar esa macro en cada línea).
Nota 2: Por supuesto, también podría agregar un mapeo si se encuentra usando norm
mucho. Por ejemplo, poner la siguiente línea en ~ / .vimrc le permite escribir ctrl-n
en lugar de :norm
después de hacer su selección visual
vnoremap <C-n> :norm
Nota 3: Vim básico a veces no tiene el norm
comando compilado en él, así que asegúrese de usar la versión reforzada, es decir, típicamente / usr / bin / vim, no / bin / vi
(Gracias a @Manbroski y @rakslice por las mejoras incorporadas en esta respuesta)