77 votes

Existe-t-il un moyen de configurer vimdiff pour ignorer TOUS les espaces blancs?

Je suis à l'aide d' vim -d file1 file2 afin de voir les différences entre eux. Cela fonctionne bien, mais je veux ignorer les changements d'espaces - ils ne sont pas pertinents pour les fichiers de code source.

Vim aider les états qui la commande suivante va faire de la magie:

set diffopt+=iwhite

Mais malheureusement, cette commande ajoute de l' -b diff outil de ligne de commande, et que seulement ignore fuite d'espaces. La ligne de commande correcte de la clé pour diff devrait être -w, pour ignorer tous les changements d'espaces. Mais je ne trouve pas comment modifier la diff de ligne de commande directement à partir de Vim. Bien sûr, je peux compiler un personnalisé diff, ou de remplacer diff avec diff.sh, mais qui ressemble un peu laid :(.

Est-il une meilleure façon de modifier la façon dont les Vim interagit avec l'outil de comparaison pour l'affichage de différences?

42voto

Adam Katz Points 857

Cela met en œuvre ce que vous voulez (extrait de la doc avec -b passe à w):

 ensemble diffopt+=iwhite
 ensemble diffexpr=DiffW()
 fonction DiffW()
 laissez-opt = ""
 si &diffopt =~ "icase"
 laissez-opt = opt . "-je "
endif
 si &diffopt =~ "iwhite"
 laissez-opt = opt . "-w "" vim utilise -b par défaut
endif
 silencieux exécuter "!diff -un --binary " . opt .
 \ v:fname_in . "" . v:fname_new . "> " . v:fname_out
endfunction

... Je suis toujours à la recherche d'une meilleure diffexpr helper pour la gestion des lignes à mapper (GNU diff, même avec -w au lieu de b, est plutôt déconcerté par la combinaison supplémentaire espaces avec des modifications mineures comme les lignes commentées).

33voto

ire_and_curses Points 32802

Oui. Définir l' iwhite option que vous avez fait, mais en outre, apportez diffexpr vide.

À partir de la section pertinente de la vim docs:

iwhite

Ignorer les changements dans la quantité d'espace blanc. Ajoute l'option "-b" drapeau de la "diff" commande si 'diffexpr' est vide. Consultez la documentation de la "diff" de commande pour que cela ne exactement. Il doit ignorer l'ajout de fuite l'espace blanc, mais ne conduisant pas d'espace blanc.

Notez également que vous pouvez fournir une coutume diff de la ligne de commande en définissant diffexpr. Voir la discussion sur le vimdiff page de man, en particulier:

Le "diffexpr' option peut être configuré pour utiliser autre chose que la norme "diff" programme pour comparer deux fichiers et de trouver les différences.

Lorsque 'diffexpr' est vide, Vim utilise cette commande pour trouver les différences entre fichier1 et fichier2:

diff file1 file2 > outfile

20voto

greg Points 41

Merci ire, cela m'a aidé. J'ai maintenant seulement besoin d'avoir ceci (plus simple que ce qui est proposé par Adam K) dans mon ~ / .vimrc:

 set diffopt+=iwhite

set diffexpr=""
 

Et il le fait ... C'est toujours l'outil de diff le plus puissant que je connaisse, bien meilleur que tout autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X