2012-10-05 12 views
9

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

私の問題は、ファイルを編集して保存すると、元に戻すツリーにチェック機能による編集が含まれていることです。私が関数にアンドゥツリーを変更させたくないという単純な方法はありますか?または、機能の開始時に状態を保存し、最後に復元することはできますか?

答えて

6

:undojoinを使用すると、ユーザーが最後に行った変更(thoug私はそれを分かち合うよりもずっと混乱しているでしょう)。一般に、取り消しは一連のステップです。途中でステップを単に省略することはできません。これは、直感的ではなく、取り消しエンジンで実装するのも難しいでしょう。

とにかく、元に戻す履歴に自動再フォーマットを含めてどうしたらいいですか?私が理解しているように、ユーザーが最後に行った編集を取り消すと、次の保存時に再適用されます。

+0

ありがとう、あなたはいくつかの良い点を確認します。私は達成しようとしていたことを再考する必要があります。 'undojoin'コマンドが便利です。 –

3

あなたBufWritePreアクションが最終的に変わらず、あなたのファイルを残して操作を実行している場合は、することができます:

:wundo <tmpfile> 

...後で同じファイルを残して変更を行います...

:rundo <tmpfile> 

この意志一時的な変更の前に元に戻す履歴を残しておきますが、ファイルが以前の状態と一致しない場合は、エラーFile contents changed, cannot use undo infoが表示されます。

あなたは中に行われた変更を行いたい場合はBufWritePre、あなたがすることができます元に戻すことは不可能:

:set undofile 

しかし、これはすべての歴史を失うことになる...

:set noundofile 

...変更を行いますBufWritePre

+0

これはすばらしく、ありがとう。ファイルが変更されていない場合にのみ、これは機能しますか?一般にファイルは変更されますが、変更を取り消すことはできません。 –

+0

@PrinceGoulashあなたは 'BufWritePre'アクションの前に変更を取り消したいのですか? – Benj

+0

はい。したがって、単語を追加して保存すると、保存がトリガーした空白の変更に関係なく、単語を削除する必要があります。 –

関連する問題