Czy można usunąć wpis z historii cofania?

10

Mam te wiersze w moim .vimrc, aby pomóc w wcięciach:

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

Jednak powodują one dużo hałasu w historii cofania. Ponieważ zasadniczo nie robią nic z perspektywy użytkownika, chciałbym je usunąć z historii lub przynajmniej jakoś je zgnieść (być może anulują się, jeśli zostaną zmiażdżone?). Czy jest na to sposób?


źródło
Próbowałem coś takiego zrobić jakiś czas temu, ale nie jest to takie proste - moje pytanie Jak mogę przefiltrować bufor do zewnętrznego polecenia po zapisaniu, nie powodując żadnych skutków ubocznych? jest bardzo podobny. Mój wniosek jest taki, że tak naprawdę nie jest to możliwe.
Martin Tournoij,

Odpowiedzi:

5

Dla tych, którzy mają ten problem i zastanawiają się, jak go obejść bez wyciszania wszystkich błędów, oto jak to zrobiłem w moim .vimrc:

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

Zasługa Christian Brabandt i do tej odpowiedzi z Randy Morris

Kjir
źródło
Należy prawdopodobnie zauważyć, że Neoformatbit jest konieczny tylko wtedy, gdy używasz wtyczki neoformat , i spowoduje problemy, jeśli go nie masz.
8bittree
Cóż, tak, polecenie należy do ciebie, dziękuję za wskazanie go!
Kjir
czy Neoformatpolecenie nie powinno znajdować się na końcu (a raczej w finallybloku)? W przeciwnym razie nie zostanie wykonane, jeśli :undojoinzgłosi błąd.
Christian Brabandt,
4

Korzystanie undojoinfaktycznie działa całkiem dobrze:

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

Jeśli jednak wykonasz polecenie :wzaraz po cofnięciu akcji, pojawi się błąd:

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

Ten błąd można wyciszyć za pomocą, silent!jak wspomniano w komentarzach , ale może mieć pewne niezamierzone skutki uboczne:

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

źródło
2
cofanie nie jest dozwolone po zakończeniu cofania. Nie można wtedy zmienić tych cofnięć. Dlatego widzisz błąd. O ile mi wiadomo, nie możesz sprawdzić tego warunku, więc możesz zawinąć to w try|catchklauzulę dla E790 lub po prostu użyć, :sil!aby wyciszyć ostrzeżenie.
Christian Brabandt,
@ChristianBrabandt Czy istnieje różnica między tymi dwiema technikami?
tak, jeden wycisza błąd szczególny, drugi wycisza każdy błąd
Christian Brabandt,