¿Cómo utilizo vim como herramienta de diferencias?

Yo uso vim como mi editor principal.

También me gustaría usar vim para diferenciar archivos y modificarlos mientras hago el diff para corregir cambios fáciles (en lugar de la mayoría de las técnicas de diff que son un ciclo de diff / fix / diff / fix).

Además, existen formas fáciles de integrar vim en las herramientas de diff utilizadas por las herramientas / sitios de control de código (Estoy pensando específicamente en git, pero estoy seguro de que otras personas estarían interesadas en la integración con otras herramientas / sitios de control de código fuente).

Comentarios

  • deberías probar vim-fugitive, agrega los comandos :Gdiff y :Gvdiff ambos comandos te permiten ver la diferencia lado a lado del búfer actual si tu búfer actual es administrado por git. También te ayuda a resolver conflictos en un diseño de tres ventanas cuando tienes conflictos de fusión en algunos archivos
  • Tengo esta función simple en mi bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } e invoco con vd file1 file2. Utiliza diff para determinar si los archivos difieren y solo abre vimdiff si es así. De lo contrario, me quedo en el caparazón. También deshabilito el resaltado de sintaxis en Vim porque me distrae cuando difiero. Solo funciona con dos archivos.

Answer

vim tiene esta funcionalidad incorporada (con la marca de línea de comando correcta ).

vim -d <file1> <file2> 

Esto abre cada archivo en una vista y resalta las diferencias.
Cualquier código que sea idéntico es folded para que no tenga que mirar un código idéntico o desplazarse por grandes trozos de código idéntico.

Pero también hay una aplicación contenedora vimdiff que invoca correctamente a vim con las banderas correctas.

vimdiff source1.cpp source2.cpp 

Si está utilizando git, puede configurar una herramienta de diferenciación externa. Por lo tanto, es fácil configurar vimdiff para que sea la herramienta de diferencias para git.

git config --global diff.tool vimdiff 

Al usar vimdiff, puede editar cualquier lado y el resaltado de diferencias mantiene el ritmo para mostrar tú las diferencias.

Nota: al editar desde un git diff. Si intenta editar la versión almacenada en el repositorio del archivo, sus cambios se descartarán cuando salga (git no confía en usted con el original, por lo que se está diferenciando de una copia tmp) pero puede editar la copia local al contenido de su corazón y guárdelo sobre su versión actual.

Algunos comandos básicos que son útiles en vimdiff

dp diffput: puts changes under the cursor into the other file making them identical (thus removing the diff). do diffget: (o => obtain). The change under the cursor is replaced by the content of the other file making them identical. ]c Jump to the next diff [c Jump to the previous diff 

Otras configuraciones de vim que utilizo para trabajar con resaltado con vimdiff

if &diff highlight! link DiffText MatchParen endif 

Esto desactiva el resaltado en los bits de código que se cambian. Entonces, la línea que se cambió está resaltada para que pueda detectar los cambios, pero el texto real que ha cambiado se destaca en la línea (ya que no está resaltado).

Comentarios

  • También maneja hasta 4 búferes, lo que lo hace ideal para comparar archivos de configuración
  • También puede usar el comando :diffthis para iniciar una diff cuando Vim ya se está ejecutando.
  • Y: diffoff para apagarlo. Creo que un enlace a la documentación de vim ‘ sería beneficioso: vimdoc.sourceforge.net/htmldoc/diff.html
  • Para mí, incluso después de git config --global diff.tool vimdiff, git diff todavía muestra todo como si no cambiara nada.
  • intente git difftool

Responda

Si es editando un archivo abierto y desea compararlo con otro archivo sin cerrar el actual:

Abra el nuevo archivo en pantalla dividida:

Para división vertical:

:vs otherFile 

o división horizontal:

:split otherFile 

Cambie los cursores a una pantalla dividida diferente:

ctrl+w ctrl+w 

Invocar el «modo diff» en el archivo:

:diffthis 

Cambie a otro archivo e invoque el «modo diff»:

:diffthis 

Para desactivar el «modo diff»:

:diffoff 

Comentarios

  • Para evitar cambiar entre En los búferes, también puede usar :windo diffthis
  • @statox: también funciona para diffoff, así que :windo diffthis y :windo diffoff para iniciar y detener diff para dos ventanas abiertas. O abreviado :windo difft y diffo!.
  • Si comienza con un archivo abierto File1, también puedes usar :vert diffs File2 para abrir File2 en una división vertical a la derecha y diferenciarla con File1.

Respuesta

Puede colocar la configuración mencionada a continuación en .gitconfig archivo que se encuentra en el directorio %homepath% (o %userprofile%) del usuario actualmente conectado:

[diff] tool = vimdiff 

Esto permitirá que la herramienta git bash comience a usar vimdiff como herramienta de diferenciación externa también.

Responder

A continuación se muestra mi configuración de git:

https://github.com/tracyone/dotfiles/blob/master/.gitconfig

[core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 [difftool] prompt = 0 

Respuesta

Para NeoVim, puede configurar su ~/.gitconfig con los siguientes comandos

git config --global merge.tool nvim git config --global mergetool.keepBackup false git config --global mergetool.nvim.cmd $"nvim -d $LOCAL $REMOTE $MERGED -c \"$wincmd w\" -c \"wincmd J\"" 

Su ~/.gitconfig debería verse así:

[merge] tool = nvim [mergetool] keepBackup = false [mergetool "nvim"] cmd = nvim -d $LOCAL $REMOTE $MERGED -c "$wincmd w" -c "wincmd J" 

Consulte la documentación de Nvim: diff para obtener más información sobre cómo configurarlo a su gusto.

Respuesta

Solo puedo ver tres sentados uations para usar vim como una herramienta de difusión. Se describen brevemente a continuación:

  • Para git difftool, ponga lo siguiente en su ~/.gitconfig:

    [core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 
  • Para abrir vim como una herramienta de diferencias para dos archivos, puede hacer lo siguiente:

    vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim 
  • Para obtener una vista de diferencias para los búferes que están actualmente activos, es decir, todos los búferes que tienen una ventana asignada en la pestaña actualmente activa, puede hacer lo siguiente:

    :windo diffthis " to get diff view :windo diffoff " to remove diff view 

Para obtener más información, consulte :h diff

Comentarios

  • si solo hay un archivo abierto todavía: :vert diffs File2 para diferenciar con File2.

Responder

esto es lo que hago:

  • abrir una ventana con el primer archivo (o el contenido del texto si está pegando data)
  • abra el siguiente archivo / ventana usando :vnew (para tener ambas ventanas una al lado de la otra) o :new ( tener las ventanas arriba yb ottom). si tiene un archivo específico para abrir en la segunda ventana, puede incluir la ruta como esta: :vnew /path/to/secondfile.txt
  • use F8 para alternar una función personalizada que se convierte en diff modo encendido y apagado

aquí está la función personalizada que está en mi ~/.vimrc:

nmap <silent> <F8> :call ToggleDiff()<CR> imap <silent> <F8> <C-O>:call ToggleDiff()<CR> function ToggleDiff () if (&diff) set nodiff noscrollbind else " enable diff options in both windows; balance the sizes, too wincmd = set diff scrollbind nowrap number wincmd w set diff scrollbind nowrap number wincmd w endif endfunction 

Comentarios

  • puedes usar el comando :diffthis y diffoff! para que no ‘ no tenga que configurar todas las opciones de diferenciación usted mismo (por ejemplo, cursorbind también lo establece el modo diff)

Respuesta

He adoptado por .vimrc con algunos comandos útiles en modo diff (parte inferior). Si edita en modo normal, la configuración se restablece (parte superior). Puede copiarlo simplemente en su archivo .vimrc.

nmap <silent> <F2> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR> inoremap <Esc>Oq 1 inoremap <Esc>Or 2 inoremap <Esc>Os 3 inoremap <Esc>Ot 4 inoremap <Esc>Ou 5 inoremap <Esc>Ov 6 inoremap <Esc>Ow 7 inoremap <Esc>Ox 8 inoremap <Esc>Oy 9 inoremap <Esc>Op 0 inoremap <Esc>On . inoremap <Esc>OQ / inoremap <Esc>OR * inoremap <Esc>Ol + inoremap <Esc>OS - inoremap <Esc>OM <Enter> nnoremap <Esc>OQ B " / nnoremap <Esc>OR E " * if &diff map <Esc>Oq zc " 1 close a fold map <Esc>Or <down> " 2 cursor down map <Esc>Os ]c " 3 next diff nmap <Esc>Ot <left> " 4 curosor left nnoremap <Esc>Ou <c-w>w " 5 jump to next file map <Esc>Ov <right> " 6 cursor right map <Esc>Ow zo " 7 open a fold map <Esc>Ox <up> " 8 curosor right map <Esc>Oy [c " 9 prefious diff map <Esc>Op 0 " 0 0 nmap <Esc>On . " . . nmap <Esc>OQ B " / back one word nmap <Esc>OR E " * end of word nmap <Esc>Ol dp " - diffput nmap <Esc>OS do " + diffget nmap <Esc>OM :diffupdate " Enter endif 

Por supuesto, puede cambiar mi configuración. Si desea poner otro comando en » 0 «, cambie el comando justo después de » Op » p. Ej. con » za » que alterna entre plegar y desplegar:

 nmap <Esc>Op za " 0 0 

Tenga en cuenta el uso diferente de » map » y » nmap » dependiendo de la clave.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *