¿Hay un comando para eliminar la línea (o n líneas) sobre la actual? Arriba = corriente no incluida.
Es decir, ¿hay una alternativa a la dkcual no se elimina la línea actual? Similar a cómo o/ Oy p/ Pfunciona, pero con eliminación.
Actualmente, lo estoy haciendo kdd, lo que mueve el cursor una línea hacia arriba y lo elimina. Podría hacerlo nnoremap <Leader>d kdd
y nnoremap <Leader>D jdd-
, pero tener una alternativa que no mueve el cursor parece una mejor opción. ¿Hay tal?
key-bindings
cursor-movement
normal-mode
Martin Tóth
fuente
fuente
nnoremap <Leader>d kddj
ynnoremap <Leader>D jddk
?kddj
ojddk
, la posición de la columna no se conserva. No digo que sea un gran problema, pero es molesto. Para el registro,kddj
mueve el cursor 1 línea debajo de la posición original. Yjdd-
parece una alternativa mejorjddk
porque al menos estoy volviendo al primer personaje que no es un espacio en blanco. Si la línea debajo de la que quiero eliminar está vacía, me quedo al comienzo de la línea.Respuestas:
corta la línea sobre la línea actual.
corta la quinta línea sobre la línea actual (pero mueve el cursor).
corta las 5 líneas sobre la línea actual.
corta las 5 líneas debajo de la línea actual.
fuente
EDITAR No conocía las funciones integradas sugeridas por @Romainl en su respuesta: por supuesto, el método
-d
y+d
debería preferirse ya que es mucho más simple que agregar funciones a su.vimrc
Tal vez agregar algo como eso
.vimrc
podría ser lo que quieres:Estas funciones eliminan la línea debajo o la línea sobre la actual y vuelven a la posición anterior a la eliminación.
Para la función
DeleteOver()
necesitamos subir una líneanormal k
después de la eliminación porque la eliminación cambia el número de la línea original que no sucede conDeleteUnder()
También puede agregar esto a su
.vimrc
Para crear las asignaciones llamando a las funciones.
fuente
nostartofline
opción.Si utilizamos el pequeño registro de eliminación "-, podemos restaurar la posición del cursor después de eliminar las n líneas anteriores.
Por ejemplo, d0dgk"-Pelimina la línea superior a 1 y restaura el cursor donde estaba.
d0elimina caracteres del cursor al primer carácter de la línea. Como 0es un movimiento exclusivo, el carácter debajo del cursor no se elimina. Y los caracteres eliminados se colocan en el pequeño registro de eliminación "-.
dgkelimina por encima de 1 línea. Esto dejará la línea actual, porque gkno es lineal y exclusiva.
"-P pone el texto del pequeño registro de eliminación "-.
Es una especie de pirateo. Pero si está buscando comandos que no sean ex, considere usarlo.
fuente
"-P
no quieres"-p
. Este último desordena el texto un poco.Tal vez mejorarás tu flujo de trabajo si no temes ... saltar :)
Ejemplo:
Sus acciones (modo normal, el cursor está en
_
):/I want
Enter
5dd
Ctrl-o
. Eso es.Por supuesto, la respuesta romana es la mejor si todo lo que desea es eliminar líneas enteras, y puede contar su desplazamiento fácilmente (usando números de lino relativos, por ejemplo). Lo anterior es una forma más genérica de "actuar": vaya allí, usando algo que cuente como un salto: esto significa que siempre puede saltar hacia atrás, después de modificar el texto.
Por ejemplo, si usa números de línea absolutos, puede reemplazarlos
/I want
Enter
con algo como78gg
o78G
saltar directamente a ese número de línea.fuente
Basado en la solución ms-kim , he desarrollado una variación ligeramente diferente que ahorra colisión.
OBS: También he usado esta publicación como referencia.
fuente
Si desea eliminar líneas duplicadas en todo el archivo, simplemente haga lo siguiente:
Ejemplo:
En modo comando
Si solo desea una lista de las cadenas inicialmente:
fuente