"u"및 "CTL-R"을 사용할 때 vim은 단일 "편집"의 크기를 어떻게 결정합니까?


17

vim에서 편집을 사용 u하거나 CTL-R실행 취소하거나 다시 실행하면 가장 최근의 키 입력뿐만 아니라 텍스트 덩어리가 변경되는 것처럼 보입니다.

단일 편집으로 간주되는 청크의 크기를 결정하는 것은 무엇입니까?

답변:


19

의 정의를 찾고 undo-blocks있습니다.

보낸 사람 :h undo-blocks:

한 명령 취소 명령은 일반적으로 명령 변경 횟수에 관계없이 입력 된 명령을 취소합니다. 이 실행 취소 가능 변경 순서는 실행 취소 블록을 형성합니다. 따라서 입력 된 키가 함수를 호출하면 함수의 모든 명령이 함께 실행 취소됩니다.

같은 블록이 사용됩니다 redo. 보낸 사람 :h redo:

마지막 변경 사항이 기억됩니다. 위의 실행 취소 및 다시 실행 명령을 사용하여 텍스트를 각 변경 이전의 상태로 되돌릴 수 있습니다. 실행 취소 전에 텍스트를 다시 가져 와서 변경 사항을 다시 적용 할 수도 있습니다.


4
CTRL-G u삽입 모드 에서 명령 을 사용하여 단일 실행 취소 차단을 수동으로 분리 할 수도 있습니다 . 이는 삽입 모드 매크로가있는 경우에 유용합니다.
fruglemonkey

8

Vim의 모달 편집 자주로 볼 연산자 (예를 들어 c, d...) 이상 적용 동작을 (예를 들어 iw, w, }, ...). Vim은 훌륭한 제품으로 Undo를 얻습니다. 다른 편집자들이 많은 작은 실행 취소를 실행 취소 블록으로 만들기 위해 추측을해야하는 반면, Vim은이를 자연스럽게 수행합니다. 또 다른 부작용은 반복 연산자 .(일명 dot 명령)를 제공한다는 것 입니다.

귀하의 질문에 특히 키 입력을 언급하므로 삽입 모드에서 작은 변경 사항을 취소하는 방법을 알고 싶다고 가정합니다. 답은 "Vim 방식"이 아닙니다. "Vim Way"는 한 번에 짧은 버스트를위한 삽입 모드에 있음을 의미합니다. 이것은 삽입 모드에서 실수가있을 때 보통 일반 모드로 빠져 나와서 텍스트를 수정하거나 실행 취소 u, 및 텍스트를 다시 작성하는 것을 의미합니다.

삽입 모드에서 실행 취소 블록을 분할해야하는 경우가 있습니다. 이것은 <c-g>u인서트 모드에서 수행 할 수 있습니다 . 참조 :h :undoj:h undo-blocks더 많은 정보를 얻을 수 있습니다.

도움이 필요하면 다음을 제안하십시오.

:h undo-blocks
:h :undoj
:h undo-tree
:h persistent-undo
:h undo.txt

이 주제에 대한 스크린 캐스트도 있습니다 :


"Chunky undo"-내가 본 최고의 설명.
Matt Parker

6

텍스트를 편집하기 위해 삽입 모드로 이동하고을 누를 때마다 Esc블록이 형성됩니다. 해당 블록을 실행 취소하려고하면 삽입 모드로 들어가기 전에 같은 위치로 이동합니다.

따라서 때때로 삽입 모드를 종료하여 변경 사항을 "저장"할 수 있습니다. 삽입 모드로 이동하여 함수를 작성한다고 가정 해 봅시다. 코딩을 계속하고 다음 기능으로 이동할 수 있지만 때로는 일반 모드로 돌아가서 삽입 모드로 다시 전환하는 것이 좋습니다. 그런 식으로 간단한 방법으로 코드를 구성 할 수 있으며 되돌아 가야 할 경우 어떤 위치에 있는지 알 수 있습니다.

참고 : 이동에 화살표를 사용하면 Esc+ [ hjkl] 를 눌렀을 때와 같습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.