2012-08-16 10 views
67

¿Cómo puedo eliminar una línea sin ponerla en mi búfer predeterminado?Cómo eliminar (no cortar) en Vim?

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 sustituye la cadena copiada reciente con el borrado (cortado) uno. Sé que puedo usar búferes como "1yy, dd y luego "1p, pero siempre me olvido de poner la cadena copiada en un búfer, entonces tengo que pegar primero mi contenido (línea que se copiará) y luego eliminar lo que quiero (línea que quiero ser sustituido con el anterior.)

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

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

+4

posible duplicado de [En vim hay una forma de eliminar sin poner texto en el registro?] (Http://stackoverflow.com/questions/54255/in-vim-is-there-a-way-to- delete-without-putting-text-in-the-register) – eckes

Respuesta

70

Utilice el "registro de agujero negro", "_ eliminar realmente algo: "_d.
Utilice "_dP para pegar algo y manténgalo disponible para pegar más.

Para la segunda pregunta, puede usar <C-o>dw. <C-o> se utiliza para ejecutar un comando normal sin dejar insertar el modo.

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

nnoremap <leader>d "_d 
xnoremap <leader>d "_d 
xnoremap <leader>p "_dP 
+0

thx, respondes mis dos preguntas. Pero no entendí cómo estos comandos noremap me ayudarán. Estoy perdiendo la función de corte, ¿verdad? – MaikoID

+1

No, 'd' todavía" corta "y' p' todavía "pega", mientras ' d' se elimina de forma real y' p' arroja el texto seleccionado y pega el contenido del registro predeterminado. ' p' me permite pegar el mismo texto varias veces sin tener que usar registros con nombre. – romainl

6

Puede usar "_d para evitar que las cosas sobrescriban su texto extraído. Puede almacenar texto extraído o eliminado en cualquier registro que desee con ", y _ es el registro de 'agujero negro', donde envía cosas que no le interesan.

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

15

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

nnoremap d "_d 
vnoremap d "_d 
+4

¿cómo se corta? – VitalyB

+2

'v/V' con' x' también se corta. Y cortar con 'x' también es coherente con' Ctrl + x' en cualquier sistema operativo. – FaithReaper

39

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

al entrar en la línea de fondo con el comando p que está pegando el contenido del (volátil) registro predeterminado"", que ha sido sobrescrito por dd. Pero aún puede pegar desde el registro yank"0, que no se sobrescribirá con el comando de eliminación dd.

Así que estos son los comandos que desee utilizar como por su ejemplo:

yy 
dd 
"0p 
5

las siguientes asignaciones producirán:

  • d => "Borrar"
  • líder d => "corte"
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 el "líder" llave en coma, por ejemplo :

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

estos 2 fragmentos harán "D" sea su nuevo comando de corte.

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

+1

Esto es excelente, gracias –

1
yy 
Vx 
p 

Cuando está en modo visual, x borrará 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.

Cuestiones relacionadas