9

BufWritePreファイルの整合性をチェックするために呼び出されるVimscript関数があります。通常、これには空白のトリミングと、折り畳み構造が「有効」であることの確認が含まれます(私の会社の規則に従って)。

私の問題は、ファイルを編集して保存すると、元に戻るツリーにチェック機能によって行われた編集が含まれることです。UNDOツリーを変更する関数が必要ないという簡単な方法はありますか?または、関数の開始時にその状態を保存し、終了時に復元できますか?

4

2 に答える 2

6

を使用:undojoinすると、変更をユーザーが最後に行った変更と結合できます(ただし、個別に変更するよりも混乱します)。一般に、元に戻すは一連の手順です。途中のステップを単純に省略することはできません。これは、直感的ではなく、元にたりエンジンに実装するのも困難です。

とにかく、元に戻る履歴に自動再フォーマットを含めることの何が悪いのでしょうか。私が理解しているように、ユーザーが最後の編集を元に戻すと、次の保存時に再適用されます。

于 2012-10-05T09:02:57.060 に答える
3

アクションが最終的にファイルを変更しない操作を実行している場合BufWritePreは、次のことができます。

:wundo <tmpfile>

...後でファイルを同じままにして変更を加えます...

:rundo <tmpfile>

これにより、一時的な変更前の元に戻る履歴が残りますが、ファイルが以前の状態と一致しない場合は、エラーが発生しますFile contents changed, cannot use undo info

元に戻すことが不可能な間に行われた変更を行いたい場合はBufWritePre、次のことができます。

:set noundofile

..変更を実行します..。

:set undofile

ただし、これは、BufWritePre

于 2012-10-05T08:13:51.743 に答える