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
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
etdiffo!
. - Si vous commencez par un fichier ouvert
File1
, vous pouvez également utiliser:vert diffs File2
pour ouvrirFile2
dans une division verticale sur la droite et le comparer avecFile1
.
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
etdiffoff!
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é.
: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 fichiersvd () { diff $@ > /dev/null ; if [[ $? -eq 1 ]] ; then ; vimdiff -c 'windo set syntax=off' $@ ; fi ; }
et jappelle avecvd file1 file2
. Il utilisediff
pour déterminer si les fichiers diffèrent et ouvre uniquementvimdiff
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.