元に戻す履歴からエントリを削除することはできますか?


10

インデントに役立つように、.vimrcに次の行があります。

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

ただし、これらは元に戻す履歴に多くのノイズを作成します。それらは本質的にユーザーの観点からは何もしないので、履歴から削除するか、少なくとも何らかの方法でそれらを押しつぶします(おそらく、一緒に押しつぶされた場合はキャンセルしますか?)。そうする方法はありますか?


私はしばらく前にこのようなことをやろうとしましたが、それほど簡単ではありません–私の質問副作用を引き起こさずに、保存時に外部コマンドにバッファをフィルタリングするにはどうすればよいですか?非常に似ています。私の結論は、それは実際には不可能だということです。
Martin Tournoij、2016年

回答:


5

この問題があり、すべてのエラーを消音せずにそれを回避する方法を知りたい人のために、ここで私がそれを私の方法で行った.vimrc

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

クレジットはクリスチャンブラバンドランディモリスからのこの答えに行きます


このNeoformatビットは、neoformatプラグインを使用している場合にのみ必要であり、neoformatプラグインがないと問題が発生することに注意してください。
ビットツリー2017

ええ、コマンドはあなた次第です。それを指摘してくれてありがとう!
Kjir 2017

Neoformatコマンドを最後に(またはfinallyブロックに)入れるべきではありませんか?それ以外の場合:undojoinは、エラーがスローされても実行されません。
クリスチャンブラバンド2017

4

undojoin実際に使用するとかなりうまくいきます:

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

ただし、:wアクションを元に戻した直後に実行すると、エラーが発生します。

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

このエラーは、コメントsilent!記載されているよう使用して沈黙させることができますが、意図しない副作用が発生する可能性があります。

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
取り消しが行われた後は、取り消し結合は許可されません。その場合、それらの取り消しエントリを変更することはできません。したがって、エラーが表示されます。私の知る限り、この状態をチェックすることはできないので、これtry|catchをE790の句に含めるか、単に:sil!警告を消すために使用することができます。
Christian Brabandt

@ChristianBrabandt 2つのテクニックに違いはありますか?

はい、1つは特定のエラーを沈黙させ、もう1つはすべてのエラーを沈黙させます
クリスチャンブラバンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.