J'utilise Vim. J'ouvre un dossier. Je le modifie et je veux voir ce que j'ai modifié avant de l'enregistrer.
Comment puis-je faire cela dans Vim?
http://vim.wikia.com/wiki/Diff_current_buffer_and_the_original_file
Voici une fonction et une commande pour voir une différence entre le fichier actuellement édité et sa version non modifiée dans le système de fichiers. Mettez-le simplement dans votre vimrc ou dans le répertoire du plugin, ouvrez un fichier, faites quelques modifications sans les enregistrer, et faites-le
:DiffSaved
.function! s:DiffWithSaved() let filetype=&ft diffthis vnew | r # | normal! 1Gdd diffthis exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype endfunction com! DiffSaved call s:DiffWithSaved()
Pour sortir de la vue diff, vous pouvez utiliser la
:diffoff
commande.Voici une fonction similaire, adaptée pour imiter la
'cvs diff'
commande ...
:w !diff % -
supérieure lorsque vous utilisez vim sur un grand nombre de boîtes en constante évolution pour lesquelles vous ne pouvez pas facilement changer le .vimrc? (À condition qu'ils aient installé un diff.)la source
diff
.%
fait référence au chemin de fichier actuellement ouvert. Pourquoi tout cela est-il un argument de la:w
commande? Aussi, comment est--
il affecté au contenu du tampon de travail? Est-ce automatique dans vim, que le contenu du tampon (ou peut-être une plage spécifique dans le tampon) soit affecté à stdin pour les commandes shell?:w
parce que nous écrivons le fichier dans la commande (onstdin
). Dans la commande, lui-
dit de lire à partir destdin
.:w !git diff % -
pour une version colorisée, si vous avez installé git!fatal: bad flag '-' used after filename
lorsque je cours:w !git diff % -
.Parce que certaines personnes ont demandé une explication pour la commande
Voici ma tentative d'écrire une réponse plus détaillée:
Je suppose que vous travaillez sur un système avec
cat
etecho
installé (par exemple presque tous les systèmes GNU / Linux, Mac OS, BSD et autres systèmes de type UNIX).La commande ci-dessus fonctionne comme suit:
La syntaxe pour enregistrer un fichier dans vim est:
La syntaxe pour exécuter une commande shell dans vim est:
À l'intérieur de l'environnement shell émis par vim,
%
il se trouve qu'il pointe vers le nom de fichier actuel. Vous pouvez le vérifier en exécutant ce qui suit:Cela devrait afficher le nom du fichier (ou une erreur, si vim a été exécuté sans nom de fichier).
En utilisant cat, nous pouvons également afficher le contenu du fichier:
Cela devrait renvoyer le contenu des fichiers dans son dernier état enregistré ou une erreur s'il n'a jamais été enregistré.
Le programme diff est capable de lire à partir de l'entrée standard (stdin). Sa page de manuel indique ce qui suit:
L'exécution de la commande save sans nom de fichier mais plutôt avec une commande shell derrière elle oblige vim à écrire le contenu des fichiers sur stdin du shell au lieu de l'enregistrer dans un fichier physique. Vous pouvez le vérifier en exécutant
Cela devrait toujours imprimer le contenu actuel des fichiers (qui aurait été écrit dans un fichier à la place).
Mettre ensemble (ou tl; dr): Le fichier est "enregistré" dans stdin, diff est exécuté avec le nom de fichier et stdin en entrée.
Connaître celui-ci pourrait également comparer des fichiers avec vimdiff faisant quelque chose comme ça - c'est juste une idée que vous ne voulez pas faire ceci:
(Ensuite, ouvrez en lecture seule et fermez vimdiff en utilisant
:qall
)la source
vim - -c ":vnew $1 |windo diffthis"
, en le rendant exécutable, en le sauvegardant dans le PATH comme par exemplevimdiffWithStdin
, puis en le comparant avec la commande suivante dans vim::w !vimdiffWithStdin %
:w !vimdiff % /dev/stdin
. Je ne sais pas si une astuce similaire existe pour Windows.J'ai toujours aimé les différences - sympa, simple, ça marche.
la source
:DiffChangesDiffToggle
.depuis vimrc_example.vim:
la source
w !diff % -
est que cela fonctionne sur les sources à distance aussi (par exemple:vim sftp://example.com/foo.txt
)Source ce qui suit et utilisez: Commande DIFF
la source
Pas exactement ce que vous recherchez, mais SCMDiff.vim est vraiment cool. Une pression sur une touche, et il met en évidence votre fichier actuel avec la révision principale dans un dépôt de contrôle de source. Il est destiné à fonctionner avec de nombreux SCMS. Je l'utilise avec forforce.
la source
Il existe un plugin, basé sur différentes réponses ici: https://github.com/gangleri/vim-diffsaved
Il fournit la
:w !diff % -
méthode et la plus impliquéediffthis
.En dehors de cela, undotree permet cela aussi, mais aussi beaucoup plus (diffs entre les différents points de contrôle d'annulation). Similaire à Gundo .
la source
Je peux recommander le plugin histwin .
Bien qu'il ne diffère pas de la version enregistrée actuelle du fichier (comme les autres réponses), il peut afficher les modifications depuis que vous avez commencé à éditer , et même rejouer vos modifications dans l'ordre. La différence apparaît si vous enregistrez de manière intermédiaire.
De plus, il affiche une liste de toutes les branches de l'historique des annulations et vous permet de basculer ou de comparer entre elles.
PS: Bien que le plugin ne suive pas automatiquement les moments dans l'historique des éditions depuis chaque changement de fichier, vous pouvez explicitement "taguer" le moment où vous enregistrez le fichier de sorte que vous puissiez plus tard vimdiff avec, si vous le souhaitez. Peut-être que cela pourrait être automatisé?
la source
Si vous souhaitez utiliser vim à des fins de comparaison comme dans vimdiff, vous pouvez faire quelque chose comme ceci:
Modifiez votre .vimrc et ajoutez:
À partir de là, vous verrez vos modifications et pourrez quitter la vue diff en utilisant
qall
comme dans vimdiff en appuyant sur F8 en mode commande. Remplacez F8 par n'importe quelle clé de votre choix.Edit: Ajout de -M pour interdire toute modification, car il n'est pas enregistré.
la source
Vim: Error reading input, exiting...
des idées de ce qui ne va pas ici?git prend en charge la commande suivante
:w !git diff --no-index -- % -
mappez-le à une commande en ajoutant ce qui suit à votre ~ / .vimrc
command GitDiff execute "w !git diff --no-index -- % -"
Maintenant, l'exécution
:GitDiff
devient une petite commande pratique pour afficher rapidement le diff avant chaque sauvegarde.la source
Vous pouvez faire en sorte que vim crée une dernière sauvegarde et une sauvegarde d'origine avec:
Par la suite, vous pouvez les ouvrir dans un split:
Et à partir de là, faites:
Si vous ne voulez plus de restes mais que vous voulez vimdiff, vous pouvez également faire:
puis faire: diffère à chaque fractionnement
la source
Les modifications que vous venez de modifier [ tampon ], à savoir celles qui diffèrent de la dernière version enregistrée (en travaillant dir ectory), ceux - ci peuvent différer avec la dernière version index ( Git ). J'ai mappé les deux:
Exemple de vimdiff vs Gdiff.
De plus, vers un
vimdiff
fichier homonyme facile dans un autre chemin:la source
Gdiff
si possible et sinon (par exemple pas un projet Git) puis effectuer a:vimdiff
. Avectry-catch-endtry
. Mais cette manière:DiffWithSaved
dans un projet Git fait défaut.Suivez ce qui précède suggère que j'utilise git diff que j'aime beaucoup:
la source