È 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.