Cómo eliminar (no cortar) en Vim?


¿Cómo puedo eliminar una línea sin colocarla en mi búfer predeterminado?

Ejemplo:

line that will be copied.

line that I want to be substitued with the previous one.

Lo que estoy tratando de hacer:

yy
dd
p

Pero Vim reemplaza la cadena copiada reciente con la eliminada (cortada). Sé que puedo usar buffers como, "1yy, dd luego "1p, pero siempre me olvido de poner la cadena copiada en un búfer, luego necesito pegar mis contenidos primero (línea que se copiará) y luego eliminar lo que quiero (línea que quiero sustituir con la anterior una.)

¿Cómo puedo borrar realmente un texto en Vi(m) sin copiarlo?

Otra pregunta relacionada es cómo puedo reenviar borrar una palabra en modo de inserción? Quiero algo similar a Ctrl+w.

Author: Mateusz Piotrowski, 2012-08-16

6 answers

Usa el "registro de agujero negro", "_ para borrar realmente algo: "_d.
Use "_dP para pegar algo y mantenerlo disponible para pegar más.

Para la segunda pregunta, podrías usar <C-o>dw. <C-o> se usa para ejecutar un comando normal sin dejar el modo insert.

Puede configurar sus propias asignaciones para guardar la escritura, por supuesto. Tengo estos:

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP
 82
Author: romainl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-23 11:21:30

El registro del agujero negro "_ hará el truco, pero hay una mejor solución:

Cuando ingresa la línea de nuevo con el comando p, está pegando el contenido del registro predeterminado (volátil) "", que ha sido sobrescrito por dd. Pero todavía se puede pegar desde el (no volátil) yank register "0, que no se sobrescribirá con el comando delete dd.

Así que estos son los comandos que desea utilizar según su ejemplo:

yy
dd
"0p
 56
Author: cutemachine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-19 07:08:53

Esa es una de las cosas que no me gustaba de vim... Terminé mapeando dd al registro de agujero negro en mi .vimrc y la vida ha sido buena desde:

nnoremap d "_d
vnoremap d "_d
 21
Author: kprobst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-16 19:23:30

Las siguientes asignaciones producirán:

  • d = > "suprimir"
  • líder d = > "cortar"
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

Además, es una buena práctica tener la tecla" líder " establecida en coma, por ejemplo:

let mapleader = ","
let g:mapleader = ","

Estos 2 fragmentos harán que ",d" sea su nuevo comando de corte.

Si desea utilizar estas asignaciones junto con una configuración compartida del portapapeles del sistema, consulte más detalles en https://github.com/pazams/d-is-for-delete

 8
Author: pazams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-24 13:15:32

Puedes usar "_d para evitar que las cosas sobrescriban tu texto tirado. Puedes almacenar texto eliminado o eliminado en cualquier registro que desees con ", y _ es el registro de 'agujero negro', donde envías cosas que no te importan.

Para más información puede escribir :help "_ o :help deleting

 6
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-16 19:24:36
yy
Vx
p

Cuando está en modo visual, x eliminará la selección, por lo que si desea eliminar una línea completa, primero presione V para seleccionar la línea en modo visual y luego presione x para eliminar la selección.

 2
Author: Atemu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-03 14:41:51