Est-il possible de supprimer une entrée de l'historique d'annulation?

10

J'ai ces lignes dans mon .vimrc pour aider à l'indentation:

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

Cependant, ils créent beaucoup de bruit dans l'histoire de l'annulation. Puisqu'ils ne font essentiellement rien du point de vue de l'utilisateur, je voudrais les supprimer de l'histoire ou à tout le moins les écraser (peut-être qu'ils s'annulent s'ils sont écrasés ensemble?). Existe-t-il un moyen de le faire?


la source
J'ai essayé de faire quelque chose comme ça il y a quelque temps, mais ce n'est pas si facile - ma question Comment puis-je filtrer un tampon sur une commande externe lors de la sauvegarde sans provoquer d'effets secondaires? est très similaire. Ma conclusion est que ce n'est pas vraiment possible.
Martin Tournoij

Réponses:

5

Pour ceux qui ont ce problème et se demandent comment contourner ce problème sans faire taire toutes les erreurs, voici comment je l'ai fait dans mon .vimrc:

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

Le crédit va à Christian Brabandt et cette réponse de Randy Morris

Kjir
la source
Il convient probablement de noter que le Neoformatbit n'est nécessaire que si vous utilisez le plugin neoformat , et causera des problèmes si vous ne l'avez pas.
8bittree
Eh bien oui, la commande est à vous, merci de l'avoir signalé!
Kjir
la Neoformatcommande ne devrait-elle pas venir à la fin (ou plutôt dans un finallybloc)? Sinon, il ne serait pas exécuté s'il :undojoinrenvoie une erreur.
Christian Brabandt
4

L'utilisation undojoinfonctionne plutôt bien:

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

Cependant, si vous exécutez :wjuste après avoir annulé une action, vous obtiendrez une erreur:

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

Cette erreur peut être réduite au silence en utilisant silent!comme mentionné dans les commentaires , mais peut avoir des effets secondaires non intentionnels:

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

la source
2
l'annulation n'est pas autorisée après une annulation. Vous ne pouvez alors pas modifier ces entrées d'annulation. Par conséquent, vous voyez l'erreur. Pour autant que je sache, vous ne pouvez pas vérifier cette condition, vous pouvez donc envelopper cela dans une try|catchclause pour E790 ou simplement utiliser :sil!pour désactiver l'avertissement.
Christian Brabandt
@ChristianBrabandt Y a-t-il une différence entre les deux techniques?
oui, l'un fait taire une erreur particula, l'autre fait taire toutes les erreurs
Christian Brabandt