Vim과 비슷한 Evil에서 실행 취소를 어떻게 처리 할 수 ​​있습니까?


17

Evil의 기본 실행 취소 동작은 삽입 모드를 시작하고 하나의 편집 작업으로 두는 것 사이에 발생하는 모든 것을 고려하기 때문에 너무 거칠습니다. 한 번의 삽입 동안 텍스트의 전체 단락을 입력 한 후 실행 취소를 실행하면 전체 단락이 제거됩니다. 반대로 Vim은 텍스트를 입력하는 것 이외의 방법으로 커서를 삽입 모드에서 움직일 때마다 새로운 실행 취소 단위를 시작합니다.

Evil에는보다 세밀한 실행 취소 기록을 얻는 데 사용할 수있는 사용자 정의 변수가 있습니다.

(setq evil-want-fine-undo t)

이 설정을 사용하면 Vim처럼 커서가 삽입 모드에서 움직일 때 Evil이 새로운 실행 취소 장치를 시작합니다. 그러나이 설정은 또한 바꾸기 작업을 처리하는 방식에 영향을줍니다.를 사용하여 단어를 바꾸는 경우 cw원래 단어를 복원하려면 두 번 실행 취소해야합니다. 한 번은 새 단어를 제거하고 한 번은 원래 단어를 다시 삽입해야합니다. 이것은 Vim과 일치하지 않으며 대체가 원자 적이어야하기 때문에별로 의미가 없습니다.

질문 : Vim의 실행 취소 동작을 얻기 위해 어떻게 악과 실행 취소 트리를 구성 할 수 있습니까?


여기에 문제를 제기하십시오 : bitbucket.org/lyro/evil/issues?status=new&status=open (악은 일반적으로 vim의 분기를 버그로 간주합니다).
shosti

@ shosti, 맞습니다. 그러나 맞춤 변수가 존재한다는 것은 현재의 경우 해당 규칙에 예외를두기로 결정했음을 나타냅니다. 어쨌든 버그를 신고하겠습니다. 어떻게되는지 보자.
tmalsburg

사용자 정의 변수는 실제로 더 많은 Emacs와 같은 실행 취소 동작을 얻는 것이라고 생각합니다 (Emacs는 vim과 동일한 방식으로 원자 연산을 수행하지 않습니다).
shosti

새로운 문제가 있습니다 : bitbucket.org/lyro/evil/issue/444/…
tmalsburg

답변:


10

@shosti는 Evil이 Vim 동작의 편차를 버그로 간주한다고 지적 했으므로 버그를 신고했으며 Evil의 저자 중 한 명이 새로운 가능한 값을 추가했습니다 evil-want-fine-undo.

(setq evil-want-fine-undo 'fine)

이 설정을 사용하면 삽입 모드에서 커서를 움직일 때 새로운 실행 취소 단위를 사용할 수 있지만 한 번에 교체 작업이 취소됩니다. 내가 알 수있는 한 이것은 Vim과 일치합니다. 자세한 내용은 여기 를 참조 하십시오 .


2
'fine설정이 더 이상 사용되지 않으므로이 솔루션은 더 이상 권장 되지 않습니다.
tmalsburg

1

변수 설명에 따르면 (참조 C-h v evil-want-fine-undo) fine일관되지 않은 동작으로 인해 값 이 더 이상 지원되지 않습니다.

내가 취소를 사용하여 오타를 취소하거나 언급 한 설정이 내 할당에 도움이되었습니다.

(setq evil-want-fine-undo t) 

당신이 변경하려는 경우 당신이 삽입 모드를 종료하지 않기 때문에 나는 조직 테이블 식 편집에 문제가 파멸 오류를 가지고 *Edit Forumlas*C-'.


업데이트 해 주셔서 감사합니다. Bitbucket 문제를 다시 열도록 요청했습니다.
tmalsburg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.