Geri alma geçmişinden bir girişi kaldırmak mümkün müdür?


10

Girintiye yardımcı olmak için .vimrc dosyamda şu satırlar var:

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

Ancak, geri alma tarihinde çok fazla gürültü yaratırlar. Aslında kullanıcının bakış açısından hiçbir şey yapmadıklarından, onları tarihe kaldırmak veya en azından bir şekilde ezmek istiyorum (belki birlikte ezildiklerinde iptal ederler?). Bunu yapmanın bir yolu var mı?


Bir süre önce böyle bir şey yapmaya çalıştım, ama bu o kadar kolay değil - sorum şu: Herhangi bir yan etkiye neden olmadan kaydetme sırasında harici bir komuta tamponu nasıl filtreleyebilirim? çok benzer. Benim sonucum, bunun gerçekten mümkün olmadığıdır.
Martin Tournoij

Yanıtlar:


5

Bu sorunu olan ve tüm hataları susturmadan nasıl çalışacağını merak edenler için, işte bunu nasıl yaptım .vimrc:

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

Kredi Christian Brabandt'a ve Randy Morris'in bu cevabına gidiyor


Muhtemelen Neoformatbitin sadece neoformat eklentisini kullanıyorsanız gerekli olduğu ve eğer sahip değilseniz sorunlara neden olacağı unutulmamalıdır .
8bittree

Evet, komut size bağlı, işaret ettiğiniz için teşekkür ederiz!
Kjir

olmamalıdır Neoformatkomut sonunda gelip (ya da daha doğrusu bir de finallybloğu)? Aksi takdirde :undojoinbir hata atarsa yürütülmez .
Christian Brabandt

4

Kullanımı undojoinaslında oldukça iyi çalışıyor:

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

Ancak, :wbir işlemi geri aldıktan hemen sonra yürütürseniz bir hata alırsınız:

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

Bu hata yorumlardasilent! belirtildiği şekilde susturulabilir , ancak kasıtsız bazı yan etkileri olabilir:

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
Geri alma işlemi yapıldıktan sonra geri alma işlemine izin verilmez. Bu geri alma girdilerini değiştiremezsiniz. Bu nedenle hatayı görürsünüz. Bildiğim kadarıyla, bu durumu kontrol edemezsiniz, bu yüzden bunu try|catchE790 için bir maddeye sarmak veya sadece :sil!uyarıyı susturmak için kullanabilirsiniz .
Christian Brabandt

@ChristianBrabandt İki teknik arasında bir fark var mı?

evet, biri partikül hatasını susturur, diğeri her hatayı susturur
Christian Brabandt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.