Comment utiliser vim comme outil de comparaison?

Jutilise vim comme éditeur principal.

Je voudrais également utiliser vim pour comparer les fichiers et modifier les fichiers tout en faisant le diff pour corriger les changements faciles (plutôt que la plupart des techniques de diff qui sont un cycle de diff / fix / diff / fix).

De plus, il existe des moyens simples dintégrer vim dans les outils de diff utilisés par les outils / sites de contrôle de source (Je pense spécifiquement à git mais je suis sûr que dautres personnes seraient intéressées par lintégration avec dautres outils / sites de contrôle de source).

Commentaires

  • vous devriez essayer vim-fugitive il ajoute les commandes :Gdiff et :Gvdiff les deux commandes vous permettent de voir le diff côte à côte du tampon actuel si votre tampon actuel est géré par git. Cela vous aide également à résoudre les conflits dans une disposition à trois fenêtres lorsque vous avez des conflits de fusion sur certains fichiers
  • Jai cette fonction simple dans mon bashrc vd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; } et jappelle avec vd file1 file2. Il utilise diff pour déterminer si les fichiers diffèrent et ouvre uniquement vimdiff si tel est le cas. Sinon, je reste dans la coquille. Je désactive également la coloration syntaxique dans Vim parce que je trouve cela gênant lorsque je diffère. Fonctionne uniquement avec deux fichiers.

Réponse

vim a cette fonctionnalité intégrée (avec lindicateur de ligne de commande correct ).

vim -d <file1> <file2> 

Cela ouvre chaque fichier dans une vue et met en évidence les différences.
Tout code identique est folded donc vous navez pas besoin de regarder du code identique ou de faire défiler dénormes morceaux de code identique.

Mais il existe également une application wrapper vimdiff qui appelle correctement vim avec les bons indicateurs.

vimdiff source1.cpp source2.cpp 

Si vous utilisez git, vous pouvez configurer un outil de comparaison externe. Il est donc facile de configurer vimdiff comme outil de comparaison pour git.

git config --global diff.tool vimdiff 

Lorsque vous utilisez vimdiff, vous pouvez modifier les deux côtés et la mise en surbrillance des différences suit le rythme vous les différences.

Remarque: lors de lédition à partir dun diff git. Si vous essayez de modifier la version stockée dans le référentiel du fichier, vos modifications seront supprimées lorsque vous quitterez (git ne vous fait pas confiance avec loriginal, vous êtes donc différent dune copie tmp) mais vous pouvez modifier la copie locale à votre guise et enregistrez-le sur votre version actuelle.

Quelques commandes de base utiles dans 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 

Autres paramètres vim que jutilise pour travailler avec le surlignage avec vimdiff

if &diff highlight! link DiffText MatchParen endif 

Cela désactive la mise en évidence sur les bits de code qui sont modifiés. Ainsi, la ligne qui a été modifiée est mise en surbrillance pour que je puisse repérer les changements, mais le texte réel qui a changé se détache sur la ligne (car il nest pas mis en surbrillance).

Commentaires

  • Gère également jusquà 4 tampons, ce qui en fait un outil idéal pour comparer les fichiers de configuration
  • Vous pouvez également utiliser la commande :diffthis pour lancer un diff lorsque Vim est déjà en cours dexécution.
  • Et: diffoff pour le désactiver. Je pense quun lien vers la documentation de vim ‘ serait bénéfique: vimdoc.sourceforge.net/htmldoc/diff.html
  • Pour moi même après git config --global diff.tool vimdiff, git diff montre toujours tout comme si je ne change rien.
  • essayez git difftool

Réponse

Si vous êtes éditer un fichier ouvert et que vous souhaitez le comparer à un autre fichier sans fermer le fichier actuel:

Ouvrez le nouveau fichier en écran partagé:

Pour le fractionnement vertical:

:vs otherFile 

ou division horizontale:

:split otherFile 

Basculez les curseurs sur un écran partagé différent:

ctrl+w ctrl+w 

Invoquez « diff mode » dans le fichier:

:diffthis 

Basculez vers un autre fichier et invoquez « diff mode »:

:diffthis 

Pour désactiver le « mode diff »:

:diffoff 

Commentaires

  • Pour éviter de basculer entre n les tampons que vous pouvez utiliser :windo diffthis aussi
  • @statox: fonctionne également pour diffoff, donc :windo diffthis et :windo diffoff pour démarrer et arrêter le diff pour deux fenêtres ouvertes. Ou abrégé :windo difft et diffo!.
  • Si vous commencez par un fichier ouvert File1, vous pouvez également utiliser :vert diffs File2 pour ouvrir File2 dans une division verticale sur la droite et le comparer avec File1.

Réponse

Vous pouvez placer le paramètre mentionné ci-dessous dans .gitconfig fichier trouvé dans le répertoire %homepath% (ou %userprofile%) de lutilisateur actuellement connecté:

[diff] tool = vimdiff 

Cela permettra à loutil git bash de commencer à utiliser vimdiff comme outil de comparaison externe.

Réponse

Voici ma configuration git:

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

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

Réponse

Pour NeoVim, vous pouvez configurer votre ~/.gitconfig avec les commandes suivantes

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\"" 

Votre ~/.gitconfig devrait alors ressembler à:

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

Reportez-vous à la documentation Nvim: diff pour plus dinformations sur la façon de le configurer à votre guise.

Réponse

Je ne vois que trois assis uations pour utiliser vim comme difftool. Ils sont brièvement décrits ci-dessous:

  • Pour git difftool, mettez ce qui suit dans votre ~/.gitconfig:

    [core] editor = vim [diff] tool = vimdiff [merge] tool = vimdiff conflictstyle = diff3 
  • Pour ouvrir vim en tant quoutil de comparaison pour deux fichiers, vous pouvez faire ce qui suit:

    vimdiff file1.ext file2.ext # for vim nvim -d file1.ext file2.ext # for neovim 
  • Pour obtenir une vue différentielle pour les tampons actuellement actifs, cest-à-dire tous les tampons auxquels une fenêtre leur est attribuée dans la page à onglet actuellement active, vous pouvez faire ce qui suit:

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

Pour plus dinformations, voir :h diff

Commentaires

  • si un seul fichier est encore ouvert: :vert diffs File2 à comparer avec File2.

Réponse

voici ce que je fais:

  • ouvrir une fenêtre avec le premier fichier (ou le contenu du texte si vous « collez data)
  • ouvrir le fichier / la fenêtre suivante en utilisant :vnew (pour avoir les deux fenêtres côte à côte) ou :new ( avoir les fenêtres en haut et b ottom). si vous avez un fichier spécifique à ouvrir dans la deuxième fenêtre, vous pouvez inclure le chemin comme ceci: :vnew /path/to/secondfile.txt
  • utilisez F8 pour basculer une fonction personnalisée qui tourne diff mode activé et désactivé

voici la fonction personnalisée qui « est dans mon ~/.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 

Commentaires

  • vous pouvez utiliser la commande :diffthis et diffoff! donc vous navez pas ‘ à définir vous-même toutes les options de diff (par exemple, cursorbind est également défini par diffmode)

Réponse

Jai adopté par .vimrc avec quelques commandes utiles en mode diff (partie inférieure). Si vous modifiez en mode normal, les paramètres sont réinitialisés (partie supérieure). Vous pouvez le copier simplement dans votre fichier .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 

Bien sûr, vous pouvez modifier mes paramètres. Si vous souhaitez mettre une autre commande sur  » 0 « , modifiez la commande juste après  » Op  » par exemple avec  » za  » qui bascule entre pliage et dépliage:

 nmap <Esc>Op za " 0 0 

Veuillez noter les différentes utilisations de  » map  » et  » nmap  » selon la clé.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *