2012-10-05 2 views
9

BufWritePre에서 호출되는 Vimscript 기능을 사용하여 파일의 무결성을 검사합니다. 일반적으로 공백을 없애고 폴드 구조가 "유효"한지 확인합니다 (회사의 규칙에 따라).Vim이 실행 취소 트리를 업데이트하지 못하도록하십시오.

내 문제는 내가 파일을 편집 한 다음 저장하면 문제가 있다는 것입니다. 실행 취소 트리에는 확인 기능에 의한 편집 내용이 포함되어 있습니다. 실행 취소 트리를 수정하는 기능을 원하지 않는다고 말하는 간단한 방법이 있습니까? 또는 함수의 시작 부분에서 상태를 저장하고 끝에 복원 할 수 있습니까?

답변

6

:undojoin을 사용하면 변경 사항을 사용자가 마지막으로 변경 한 사항 (예 : thoug h 나는 그들을 분리시키는 것보다 더 혼란 스럽다). 일반적으로 실행 취소는 일련의 단계입니다. 중간에 단계를 생략 할 수는 없으며 실행 취소 엔진에서 구현하기가 쉽지 않으며 어렵습니다.

어쨌든 실행 취소 기록에서 자동 다시 포맷을 포함시키는 것이 좋지 않으십니까? 내가 이해하는 한, 사용자가 마지막 편집을 취소 할 때 다음 저장시 다시 적용됩니다.

+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

예. 따라서 단어를 추가하고 저장하면 '절약'이 발생하는 공백 변경에 관계없이 'u'가 단어를 제거해야합니다. –