salir - vim-¿Cómo eliminar un gran bloque de texto sin contar las líneas?
vi ir al final del archivo (13)
En vim, a menudo me encuentro borrando (o copiando) grandes bloques de texto. Uno puede contar las líneas de texto y decir (por ejemplo) 50dd
para eliminar 50 líneas.
Pero, ¿cómo se eliminaría este gran bloque de texto sin tener que saber cuántas líneas borrar?
Eliminar un bloque de texto
Suponiendo que su cursor se encuentra al comienzo del bloque:
V/^$<CR>d (where <CR> is the enter/return key)
Explicación
- Ingrese al modo "linewise-visual":
V
- Resalta hasta la siguiente línea vacía:
/^$<CR>
- Eliminar:
d
Clave de enlace
Una solución más robusta:
:set nowrapscan
:nnoremap D V/^/s*$//|/%$<CR>d
Explicación
- Deshabilitar
:set nowrapscan
búsqueda:set nowrapscan
- Vuelva a asignar la clave
D
(a los siguientes comandos):nnoremap D
- Ingrese al modo "linewise-visual":
V
- Resalta hasta la siguiente línea vacía / en blanco o EOF:
/^/s*$//|/%$<CR>
- Eliminar:
d
Aquí hay muchas respuestas mejores, pero, para completar, mencionaré el método que solía usar antes de leer algunas de las excelentes respuestas mencionadas anteriormente.
Supongamos que quiere eliminar de las líneas 24-39. Puedes usar el comando ex
:24,39d
También puedes tirar líneas usando
:24,39y
Y encuentre y reemplace solo sobre las líneas 24-39 usando
:24,39s/find/replace/g
Contar líneas es demasiado tedioso para mí, pero contar ''párrafos'' no es tan malo. ''{'' y ''}'' mueven el cursor a la primera línea vacía antes y después del cursor, respectivamente. Las operaciones de movimiento del cursor se pueden combinar con eliminación, y varias otras respuestas usaron un enfoque similar (dd para una línea, dG para el final del documento, etc.)
Por ejemplo:
/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */
Lorem *ipsum(void) {
return dolor(sit, amet);
}
Si el cursor comienza sobre el bloque de comentarios, ''d}'' borra el bloque de comentarios, y ''d2}'' elimina tanto el bloque de comentarios como el bloque de códigos. Si el cursor comienza debajo del bloque de código, ''d {'' borra el código y ''d2 {'' borra ambos. Por supuesto, puede omitir un bloque moviendo primero el cursor: ''{d {'' o ''} d}''.
Si es coherente con su espacio en blanco, o puede contar los párrafos de un vistazo, esto debería funcionar. El archivo de ayuda de Vim tiene más trucos de cursor si estás interesado.
Depende de qué es ese bloque grande . Tal vez solo quieras eliminar un párrafo, en cuyo caso un chasquido sería suficiente.
Hay varias posibilidades, lo mejor depende del texto en el que trabaje.
Dos posibilidades vienen a la mente:
- cambiar al modo visual (
V
,SV
, ...), seleccionar el texto con el movimiento del cursor y presionard
- eliminar un párrafo completo con:
dap
Junto con otros movimientos que ya se mencionaron aquí, también hay movimiento de /{pattern}<CR>
, así que si sabes que quieres eliminar a la línea que contiene foo, podrías hacer dV/foo<CR>
. V
está aquí para forzar el movimiento en línea, porque por defecto /
es característico.
No soy vim guru, pero lo que uso en esta circunstancia es el "modo visual". En modo comando, escriba V
(capital). A continuación, suba / baje para resaltar el bloque que desea eliminar (funcionan todos los comandos de movimiento habituales). Luego quítalo con x
o d
.
Puede colocar el cursor al principio o al final del bloque e ingresar al modo visual (shift-v). Luego, simplemente mueva hacia arriba o hacia abajo hasta que se resalte el bloque deseado. Finalmente, copie el texto presionando y o corte el texto presionando d.
Si dNNG
números de línea a través del set number
, puede simplemente dNNG
que eliminará a la línea NN de la posición actual. De modo que puede navegar hasta el comienzo de la línea que desea eliminar y simplemente d50G
suponiendo que es la última línea que desea eliminar.
Si todo el bloque está visible en la pantalla, puede usar la configuración relativanúmero. Ver: ayuda relativonúmero. Disponible en 7.3
También puede ingresar un número muy grande y luego presionar dd
si desea eliminar todas las líneas debajo del cursor.
También puede usar el modo visual (algunos comandos también se pueden usar con la opción de borrar) vip vap para seleccionar el párrafo, v2ap para seleccionar dos párrafos dap funciona, d2ap también. Puedes eliminar dentro de bloques de [
]
como da [
Para referencia: los tipos de objetos. De la documentación de vim: sección 4. http://vimdoc.sourceforge.net/htmldoc/visual.html
4. Operating on the Visual area *visual-operators*
...
The objects that can be used are:
aw a word (with white space)
iw inner word
aW a WORD (with white space)
iW inner WORD
as a sentence (with white space)
is inner sentence
ap a paragraph (with white space)
ip inner paragraph
ab a () block (with parenthesis)
ib inner () block
aB a {} block (with braces)
iB inner {} block
a< a <> block (with <>)
i< inner <> block
a[ a [] block (with [])
i[ inner [] block
Vaya a la línea de partida y escriba m a (marque "a"). Luego vaya a la última línea e ingrese d '' a (eliminar para marcar "a").
Eso eliminará todas las líneas del actual al marcado (inclusive). También es compatible con vi
y vim
, en caso de que su entorno no sea bendecido con este último.