BufWritePre
ファイルの整合性をチェックするために呼び出されるVimscript関数があります。通常、これには空白のトリミングと、折り畳み構造が「有効」であることの確認が含まれます(私の会社の規則に従って)。
私の問題は、ファイルを編集して保存すると、元に戻るツリーにチェック機能によって行われた編集が含まれることです。UNDOツリーを変更する関数が必要ないという簡単な方法はありますか?または、関数の開始時にその状態を保存し、終了時に復元できますか?
を使用:undojoin
すると、変更をユーザーが最後に行った変更と結合できます(ただし、個別に変更するよりも混乱します)。一般に、元に戻すは一連の手順です。途中のステップを単純に省略することはできません。これは、直感的ではなく、元にたりエンジンに実装するのも困難です。
とにかく、元に戻る履歴に自動再フォーマットを含めることの何が悪いのでしょうか。私が理解しているように、ユーザーが最後の編集を元に戻すと、次の保存時に再適用されます。
アクションが最終的にファイルを変更しない操作を実行している場合BufWritePre
は、次のことができます。
:wundo <tmpfile>
...後でファイルを同じままにして変更を加えます...
:rundo <tmpfile>
これにより、一時的な変更前の元に戻る履歴が残りますが、ファイルが以前の状態と一致しない場合は、エラーが発生しますFile contents changed, cannot use undo info
。
元に戻すことが不可能な間に行われた変更を行いたい場合はBufWritePre
、次のことができます。
:set noundofile
..変更を実行します..。
:set undofile
ただし、これは、BufWritePre