Ist es möglich, einen Eintrag aus dem Rückgängig-Verlauf zu entfernen?

10

Ich habe diese Zeilen in meiner .vimrc, um beim Einrücken zu helfen:

autocmd BufReadPost * set noexpandtab | retab! 4
autocmd BufWritePre * set expandtab | retab! 4
autocmd BufWritePost * set noexpandtab | retab! 4

Sie verursachen jedoch viel Rauschen in der Rückgängig-Geschichte. Da sie aus Sicht des Benutzers im Wesentlichen nichts tun, möchte ich sie aus dem Verlauf entfernen oder zumindest irgendwie quetschen (vielleicht heben sie sich auf, wenn sie zusammengedrückt werden?). Gibt es eine Möglichkeit dazu?


quelle
Ich habe vor einiger Zeit versucht, so etwas zu tun, aber es ist nicht so einfach - meine Frage Wie kann ich beim Speichern einen Puffer nach einem externen Befehl filtern, ohne Nebenwirkungen zu verursachen? ist sehr ähnlich. Mein Fazit ist, dass es nicht wirklich möglich ist.
Martin Tournoij

Antworten:

5

Für diejenigen, die dieses Problem haben und sich fragen, wie sie es umgehen können, ohne alle Fehler zum Schweigen zu bringen, hier ist, wie ich es in meinem gemacht habe .vimrc:

au BufWritePre * try | undojoin | Neoformat | catch /^Vim\%((\a\+)\)\=:E790/ | endtry

Dank geht an Christian Brabandt und an diese Antwort von Randy Morris

Kjir
quelle
Es sollte wahrscheinlich beachtet werden, dass das NeoformatBit nur erforderlich ist, wenn Sie das Neoformat-Plugin verwenden , und Probleme verursachen wird, wenn Sie es nicht haben.
8bittree
Nun ja, der Befehl liegt bei Ihnen, danke, dass Sie darauf hingewiesen haben!
Kjir
sollte der NeoformatBefehl nicht am Ende (oder eher in einem finallyBlock) kommen? Andernfalls würde es nicht ausgeführt, wenn :undojoinein Fehler ausgelöst wird.
Christian Brabandt
4

Verwenden undojoinfunktioniert eigentlich ganz gut:

autocmd BufReadPost *  undojoin | set noexpandtab | retab! 4
autocmd BufWritePre *  undojoin | set expandtab   | retab! 4
autocmd BufWritePost * undojoin | set noexpandtab | retab! 4

Wenn Sie jedoch :wdirekt nach dem Rückgängigmachen einer Aktion ausführen , wird folgende Fehlermeldung angezeigt:

Error detected while processing BufWritePre Auto commands for "*":
E790: undojoin is not allowed after undo
Error detected while processing BufWritePost Auto commands for "*":
E790: undojoin is not allowed after undo

Dieser Fehler kann silent!wie in den Kommentaren erwähnt zum Schweigen gebracht werden , kann jedoch einige unbeabsichtigte Nebenwirkungen haben:

autocmd BufReadPost *  silent! undojoin | set noexpandtab | retab! 4
autocmd BufWritePre *  silent! undojoin | set expandtab   | retab! 4
autocmd BufWritePost * silent! undojoin | set noexpandtab | retab! 4

quelle
2
Das Rückgängigmachen ist nach dem Rückgängigmachen nicht mehr zulässig. Sie können diese Rückgängig-Einträge dann nicht ändern. Daher sehen Sie den Fehler. Soweit ich weiß, können Sie diesen Zustand dort nicht überprüfen. try|catchDaher möchten Sie ihn möglicherweise in eine Klausel für E790 einschließen oder einfach zum Stummschalten :sil!der Warnung verwenden.
Christian Brabandt
@ChristianBrabandt Gibt es einen Unterschied zwischen den beiden Techniken?
Ja, einer bringt einen Partikelfehler zum Schweigen, der andere bringt jeden Fehler zum Schweigen
Christian Brabandt,