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
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
ydiffo!
. - Si comienza con un archivo abierto
File1
, también puedes usar:vert diffs File2
para abrirFile2
en una división vertical a la derecha y diferenciarla conFile1
.
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
ydiffoff!
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.
: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 archivosvd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
e invoco convd file1 file2
. Utilizadiff
para determinar si los archivos difieren y solo abrevimdiff
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.