È possibile rimuovere una voce dalla cronologia degli annullamenti?


10

Ho queste righe nel mio .vimrc per aiutare con il rientro:

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

Tuttavia, creano molto rumore nella cronologia degli annullamenti. Dal momento che essenzialmente non fanno nulla dal punto di vista dell'utente, mi piacerebbe rimuoverli dalla storia o almeno in qualche modo schiacciarli (forse si annullano se schiacciati insieme?). c'è un modo per farlo?


Ho provato a fare qualcosa del genere qualche tempo fa, ma non è così facile - la mia domanda Come posso filtrare un buffer su un comando esterno durante il salvataggio senza causare effetti collaterali? è molto simile. La mia conclusione è che non è davvero possibile.
Martin Tournoij,

Risposte:


5

Per coloro che hanno questo problema e si chiedono come aggirare senza mettere a tacere tutti gli errori, ecco come l'ho fatto nel mio .vimrc:

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

Il merito va a Christian Brabandt e alla risposta di Randy Morris


Dovresti probabilmente notare che il Neoformatbit è necessario solo se stai usando il plugin neoformat e causerà problemi se non lo hai.
8bittree,

Bene sì, il comando dipende da te, grazie per averlo sottolineato!
Kjir,

il Neoformatcomando non dovrebbe arrivare alla fine (o meglio in un finallyblocco)? Altrimenti non verrebbe eseguito se :undojoingenera un errore.
Christian Brabandt,

4

L'uso in undojoinrealtà funziona piuttosto bene:

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

Tuttavia, se esegui :wsubito dopo aver annullato un'azione, otterrai un errore:

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

Questo errore può essere silenziato usando silent!come indicato nei commenti , ma può avere alcuni effetti collaterali involontari:

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

2
l'annullamento non è consentito dopo l'annullamento. Quindi non è possibile modificare quelle voci di annullamento. Quindi vedi l'errore. Per quanto ne so, non è possibile verificare questa condizione, quindi è possibile includerla in una try|catchclausola per E790 o semplicemente utilizzare :sil!per silenziare l'avviso.
Christian Brabandt,

@ChristianBrabandt C'è una differenza tra le due tecniche?

sì, uno fa tacere un errore particula, l'altro mette a tacere ogni errore
Christian Brabandt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.