2012-05-23 9 views
8

In vim möchte ich durch alle Änderungen in alle Puffer in chronologischer Reihenfolge rückgängig machen.vim - Rückgängig über alle Puffer/Windows/offene Dateien usw.

z. B. in einer vim-Sitzung habe ich normalerweise viele Registerkarten geöffnet, mit vielen Fenstern in jedem Register. Mit u zum Rückgängigmachen (oder g;/g, Verschieben durch die Änderungsliste) verschiebt vim Änderungen, die an Puffer vorgenommen werden, auch wenn in anderen Puffer neuere Änderungen vorgenommen werden. (Ich gebe zu, ist, was ich die meiste Zeit will.)

Aber gibt es eine Möglichkeit, durch Änderungen in allen Puffern in chronologischer Reihenfolge zurückzukommen? (Ich stelle mir vor, dass vim von Registerkarte zu Registerkarte springen würde, was in Ordnung wäre.)

Warum sollte das nützlich sein? ... meistens, wenn ich nach einer Pause mit dem Codieren fortfahre, kann ich mich daran erinnern, "wo ich vorgehe", d. h. alle Änderungen, die ich beim letzten Mal gemacht habe.

UPDATE (MacVim 7.3 Verwendung): Antworten über git mit/Mercurial gute Punkte machen (vor allem dank für git stash), aber ich würde immer noch diese Funktion nützlich, da es mich zurück durch die jüngsten Änderungen Schritte, in um mit der Syntaxfärbung, innen vim etc.)

+5

Ich würde argumentieren, dass Commit-Protokolle bessere Indikatoren für Fortschritte als alles andere sind. Selbst wenn Sie nicht abgeschlossene Änderungen haben, ist es möglich, eine Nachricht zu 'git stash' hinzuzufügen. – derekerdmann

+0

FTR Ich stimme der allgemeinen Stimmung hier zu: VCS verwenden. Besser noch, benutze DVCS und microcommit! – sehe

+0

Ein weiterer Anwendungsfall: Ich habe gerade 5 Minuten zu aggressiv umgestaltet. Jetzt versagen eine Tonne Unit-Tests und ich habe keine Ahnung, was ich kaputt gemacht habe. Ich möchte rückgängig machen, bis die Tests erneut bestanden haben. Ja, wenn ich vor dem Refactoring nach einer Überprüfung der Versionskontrolle suchen würde, wäre das in Ordnung gewesen, aber daran habe ich nicht gedacht. – alexanderbird

Antwort

4

Sie könnten einen langen Weg mit undolist kommen:

:bufdo echo expand('%') | undolist 

Ergebnisse, z.B. für eine einfache Bearbeitungssitzung:

SpiritParser.cpp 
number changes when    saved 
    1  1 13:57:51 
SpiritParser.h 
number changes when    saved 
    1  1 13:57:55 

dies für alle sichtbaren Fenster zu tun, tun windo statt bufdo. Wenn Sie mehrere Registerkarten haben, machen Sie das

:tabdo windo echo expand('%') | undolist 
1

Sie sollten eine Art Versionskontrolle werden: Git, Mercurial, Subversion, was auch immer ...

Jeden Morgen Sie Ihr Projekt aufgenommen wird und gehen durch vorherige Commits lesen Um zu sehen, was sich geändert hat, können Sie Zweige erstellen, um an bestimmten Funktionen zu arbeiten. Sie schreiben saubere und beschreibende Commit-Nachricht, um Ihre früheren Änderungen usw. besser zu verstehen.

Oder Sie könnten etwas wie :windo u tun. Aber das klingt chaotisch.

Verwandte Themen