¿Cómo solo hago dp o hago solo las líneas, no todo el bloque en Vim diff?

28

Actualmente estoy usando la opción de menú "Split Diff by ..." de MacVim (Instantánea 64).

El archivo es Django's my settings.pyde la versión 1.3.1 a un archivo nuevo de la versión 1.4.

Captura de pantalla

Se dos comandos basicos

  1. do para "obtener" (y reemplazar) un bloque del otro lado.
  2. dp para "poner" (y reemplazar) un bloque al otro lado.

Pero esos dos comandos escriben todo el bloque, que en MacVim son los reflejos morados.

Si observa el segundo bloque, puede ver que de la línea 2 y 3 solo tiene 2 palabras que son diferentes: mysitey hobbes3. Solo quiero reemplazar por línea, no todo el bloque.

Entonces, ¿qué hay un comando para reemplazar do doy dppor línea como opuesto a un bloque completo o tengo que escribirlo manualmente?

Pregunta extra : Noté que una vez que edito manualmente un bloque, pierdo el resaltado púrpura. ¿Cómo "actualizo" el diff nuevamente para incluir los resaltados sin volver a abrir el archivo?

Intente mantener las respuestas Vim-general en lugar de MacVim-específicas.

hobbes3
fuente

Respuestas:

30

hay muchas maneras de hacer esto.

  1. Seleccione el rango de líneas en el búfer de destino que desea obtener del búfer de origen y use :diffget. Por ejemplo, puede seleccionar visualmente un rango de líneas con V, luego escribir :diffget.
  2. Seleccione el rango de líneas en el búfer de origen que desea colocar en el búfer de destino y use :diffput. Por ejemplo, para poner la línea actual en el otro búfer, escriba :.diffput.
  3. Usa tirar y poner. Seleccione el rango de líneas en el búfer de origen que desea copiar en el búfer de destino, tírelas utilizando Y, mueva el cursor al búfer de destino y colóquelas donde desee po Pluego elimine las líneas que no desea.
  4. Yank como anteriormente, pero en el búfer de destino, seleccione visualmente el rango de líneas que desea reemplazar (no necesariamente el mismo número de líneas) y escriba "0p. Utiliza el registro 0 (cero) que siempre contiene el texto del tirón más reciente.

Para "actualizar" la pantalla para mostrar el resaltado adecuado, ejecutar :diffupdateo simplemente :diffu. A veces eso no es suficiente y necesita mover el cursor a la otra ventana para completar la actualización.

Puede leer más sobre cómo copiar diferencias en

:help copy-diffs
garyjohn
fuente
3

También quería modificar una línea en un momento dado durante una diferencia. Así que creé un mapa simple y los puse en mi archivo vimrc.

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

Podrías usar do en lugar de dg, pero estoy más acostumbrado a pensar "diffget" en lugar de [o] btain.

Para su bonificación, solo uso otro mapa simple dos veces:

nnoremap <silent> <leader>df :call DiffToggle()<CR>

Ahora, df apagará / encenderá el modo de difusión, así que solo lo apago y vuelvo a encender.

Y una opción adicional es agregar

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

Esto le permitirá deshacer un error tipográfico o un cambio no deseado en el otro archivo / ventana, porque: deshacer solo solo deshacerá un cambio en la ventana actual.

lucky85dog
fuente