Por lo general, me encuentro copiando texto de un punto a otro mientras sobrescribo el texto antiguo donde se pega el nuevo:
blah1
newtext
blah2
wrong1
blah3
wrong2
blah4
Supongamos que marco visualmente newtexty lo yanimo. Ahora selecciono wrong1(que podría ser cualquier cosa, no necesariamente solo una palabra) y pasigno el aste newtext. Sin embargo, si ahora hago lo mismo wrong2, será reemplazado con en wrong1lugar de newtext.
Entonces, ¿cómo evito que el texto que está en el búfer se intercambie con el texto que estoy sobrescribiendo actualmente?
Editar 1
Aunque me gustan bastante las sugerencias de registro (creo que comenzaré a usar registros más, ahora que descubrí el :discomando), voy con una modificación de la respuesta de jinfield , porque no uso el modo de intercambio.
vnoremap p "0p
vnoremap P "0P
vnoremap y "0y
vnoremap d "0d
hace el truco perfectamente
Editar 2
Fui demasiado rápido; La solución de romainl es precisamente lo que estaba buscando, sin el truco en Edición 1 .
En realidad, vnoremap p "_dPes suficiente!
Entonces, cambiando la respuesta aceptada.
fuente

vnoremap p "_dP map, y he notado que no funciona bien para la última palabra / carácter en una línea. He ido a la vueltavnoremap p "0p,vnoremap P "0Pyset clipboard=unnamed(para OSX)vnoremap p "_dPelimina el espacio en blanco en la pasta. Edit 1 funciona perfectamente.Respuestas:
Tengo estas asignaciones en mi .vimrc:
"_es el "registro de agujeros negros", de acuerdo con:help "_:"Al escribir en este registro, no sucede nada. Esto se puede usar para eliminar texto sin afectar los registros normales. Al leer desde este registro, no se devuelve nada. {No en Vi}"
fuente
vnoremap p "_dP mapy noté que no funciona bien para la última palabra / carácter en una línea. He ido a la vueltavnoremap p "0p,vnoremap P "0Pyset clipboard=unnamed(para OSX)vnoremap p "_dPdejar de trabajar para mí en el modo de selección, perovnoremap <leader>p "_dPfunciona<leader>es un marcador de posición que se supone que debo reemplazar por algo, pero esto solo funciona para mí si lo elimino. ¿Qué significa aquí?:help mapleader.vnoremap <leader>pmapeo no funciona correctamente en la última línea del búfer porque tan pronto como elimine esa última línea del búfer, ahoraPestará en la última línea de un segundo y pegará sobre esa línea, en lugar de abajoAdemás del búfer estándar, puede extraer texto en búferes con nombre y luego colocarlos en esos búferes con nombre. Hay hasta 26 buffers con nombre que puede usar (uno para cada letra). Use comillas dobles y una letra para acceder a un búfer con nombre. Ejemplos:
"dyy- Yank la línea actual en el búfer d."a7yy- Yank las siguientes siete líneas en el búfer a."dP- Ponga el contenido del búfer d antes del cursor."ap- Ponga el contenido del búfer a después del cursorOtra cosa interesante, si usa una letra mayúscula en lugar de minúsculas, es decir,
"Dyyla línea actual se agregará al búfer d en lugar de reemplazarlo. Más detalles en el libro de O`Reilly: http://docstore.mik.ua/orelly/unix/vi/ch04_03.htmfuente
"atodo, pero está bien.Cuando se usa
puten modo visual, el texto que está reemplazandowrong1se sobrescribe con el contenido del registro 'sin nombre'.Esto realmente funciona 'poniendo' el registro después de la selección y luego eliminando la selección. El problema es que esta eliminación ahora se almacena en el
unnamedregistro y se usará para la próximaputacción.La solución, según
:h v_p, es tirar en un registro con nombre, como"0ypegar usando"0ptantas veces como sea necesario. Puede ser útil mapear<leader>yy<leader>pusar un registro con nombre, si esto es algo que hace con frecuencia.para más ayuda ver:
fuente
"0Es importante saber cómo pegar desde el registro, pero a menudo desea reemplazarlo muchas veces. Si lo convierte en una acción repetible, puede usar el.operador, como aludió garyjohn. Se explica en la wiki de vim :fuente
Cuando tira del texto al registro sin nombre *, también se coloca una copia en el registro 0. Cada vez que reemplaza el texto seleccionado, puede pegar desde el registro 0. Ver
Además, si está reemplazando varias palabras con la misma palabra, simplemente puede pasar al comienzo de la palabra que desea reemplazar y escribir
.. Eso repetirá la última operación de edición. Ver* Las ubicaciones de almacenamiento en las que tira y coloca se denominan registros. Un búfer es lo que edita, generalmente una copia de un archivo del disco.
fuente
Necesito esto tan a menudo, escribí un complemento para eso: Reemplazar con registro .
Este complemento ofrece un
grcomando dos en uno que reemplaza el texto cubierto por un {movimiento}, línea (s) completa (s) o la selección actual con el contenido de un registro; el texto antiguo se elimina en el registro de agujeros negros, es decir, se ha ido.fuente
Como algo como
vnoremap p "_dP(también probéxoc) tiene problemas con el inicio y el final de la línea, terminé haciendo esto:vnoremap p :<C-U>let @p = @+<CR>gvp:let @+ = @p<CR>lo que encontré más simple que los complementos existentes (que tampoco funcionabaset clipboard=unnamedplusde fábrica). Entonces, lo que hace es:C-U)+registro de respaldo (debido a unnamed plus, las alternativas son"y*dependiendo de su configuración) parapfuente
Esto es lo que uso (literalmente copiado de mi .vimrc) para el estilo de Windows Control + X cortar / Control + C copiar / Control + V pegar / Control + S guardar / Control + F buscar / Control + H reemplazar el comportamiento.
La función smartpaste () debe contener lo que busca, es decir, una forma de pegar sobre el texto resaltado sin tirar simultáneamente de lo seleccionado.
fuente
tl; dr - vnoremap p "_c *
Aquí hay una lista de mis asignaciones completas:
"Reparar registro copiar / pegar
nnoremap DD" * dd
nnoremap D "* d
vnoremap D" d
nnoremap d "_d
nnoremap dd" _dd
vnoremap d "_d
nnoremap s" _s
vnoremap s "_s
nnoremap c "_c
vnoremap c" _c
nnoremap x "_x
vnoremap x" _x
vnoremap p "_c
"Pegar en nueva línea
nnoremap, p op
nnoremap, P Op
fuente