USR_32

*usr_32.txt*	Vim version 7.4 대상.  새로 고침: 2010년 7월 20일

		      VIM 사용설명서 - Bram Moolenaar 저
				       정지용 역

				실행 취소 트리


Vim에서는 실행 취소를 여러 단계로 할 수 있습니다.  만약 몇 가지 수정 사항을
되돌린 후, 다른 곳을 수정하면 실행 취소 흐름에 새로운 분기가 생깁니다.  이번
장에서는 이런 분기들을 돌아다니는 방법을 살펴봅니다.

|32.1|	파일에 저장한 시점으로 실행 취소
|32.2|	수정 사항 번호
|32.3|	실행 취소 트리 돌아다니기
|32.4|	시간 여행

다음 장: |usr_40|  새로운 명령 만들기
이전 장: |usr_31|  GUI 활용하기
   차례: |usr_toc|


*32.1*	파일에 저장한 시점으로 실행 취소

때로는 몇 가지 바꾼 후에, 마지막으로 저장한 시점으로 되돌리고 싶어질 때가
있습니다.  다음 명령을 사용하면 됩니다:

	:earlier 1f

여기서 "f"는 "file"을 의미합니다.

이 명령을 반복해서 계속 과거로 더 돌아갈 수 있습니다.  또는 1이 아닌 수를
사용해서 더 빨리 돌아갈 수도 있습니다.

너무 많이 돌아가 버렸다면, 다시 앞으로 돌아올 수도 있습니다:

	:later 1f

이 명령들이 실제로는 시간 순으로 동작한다는데 주의하세요.  만약 실행 취소를
한 뒤 다른 부분을 고쳤다면 문제가 될 수 있습니다.  여기에 대해서는 다음
절에서 설명하겠습니다.

또한 현재 창에서 작성한 내용에 대해서만 다루고 있다는 점에도 주의하세요.
실행 취소 정보를 파일에 저장하려면 |undo-persistence|를 참고하세요.


*32.2*	수정 사항 번호

|02.5| 에서는 실행 취소와 다시 하기를 다른 편집 없이 연속적으로 해보았습니다.
하지만, 실행 취소 흐름에 분기를 만들 수도 있습니다.  실행 취소를 몇 번 한 다음
다른 곳을 새로 고치면 분기가 생깁니다.  새롭게 고친 것이 실행 취소 트리의
분기가 됩니다.

예를 들어보겠습니다.  "one" 이란 문자열이 있습니다.  첫 번째로 " too"란 내용을
덧붙여보겠습니다.  그리고 "too"의 첫 번째 'o'로 이동해서 'w'로 바꿉시다.  두
가지 수정 사항이 있었고, 이를 각각 1, 2번이라 합시다.  그리고 본문은 다음과
같이 세 상태가 있었습니다:

		one 
		 |
	      수정 1
		 |
	      one too 
		 |
	      수정 2
		 |
	      one two 

이제 수정 사항 하나를 실행 취소하고 "one too"로 돌아갑시다.  그리고 "one"을
"me"로 바꾸면 실행 취소 트리에 새로운 분기가 생깁니다:

		one 
		 |
	      수정 1
		 |
	      one too 
	      /     \
	 수정 2    수정 3
	    |	      |
	 one two    me too 

|u| 명령으로 실행 취소를 할 수 있습니다.  두 번 실행 취소를 하면 "one"이
됩니다.  |CTRL-R|로 재실행을 하면, "one too"가 됩니다.  |CTRL-R|을 한 번 더
하면 "me too"가 됩니다.  따라서 실행 취소와 다시 하기는 위 트리를 위아래로
움직이는 것이고, 이때 가장 최근에 사용한 분기를 따라 움직입니다.

즉, 어떤 순서로 수정이 이루어졌는지가 중요합니다.  이때, 실행 취소와
다시 하기는 새로운 수정으로 보지 않습니다.  새로운 수정을 할 때마다 문서에는
새로운 상태가 생깁니다.

수정 사항에만 번호가 붙여지고, 문서 상태 자체는 번호가 없습니다.  대부분은
상태 바로 위에 있는 그 문서 상태를 만든 수정 사항의 번호로 구분할 수 있습니다.
하지만, 종종 트리를 올라가고 있을 때와 같은 경우는 상태 밑에 있는 번호가
사용될 때도 있습니다.  방금 실행 취소 된 수정 사항의 번호를 알 수 있도록
말이지요.


*32.3*	실행 취소 트리 돌아다니기

그렇다면 "one two"로는 어떻게 갈 수 있을까요?  다음 명령을 사용하십시오:

	:undo 2

이제 "one two"가 되고 2번 수정 사항 밑으로 갑니다.  |:undo| 명령으로 트리의
어느 수정 사항 밑으로든 갈 수 있습니다.

또 다른 수정 사항을 만들어 봅시다: "one"을 "not"으로 바꾸겠습니다:

		one 
		 |
	      수정 1
		 |
	      one too 
	      /     \
	 수정 2    수정 3
	    |	      |
	 one two    me too 
	    |
	 수정 4
	    |
	 not two 

다시 생각을 바꾸어 "me too"로 돌아가고 싶다고 합시다.  |g-| 명령을
사용하십시오.  이 명령은 시간 순으로 거꾸로 움직입니다.  따라서 트리를
올라가거나 내려가거나 하지 않고, 바로 이전에 가해진 수정 사항을 따라갑니다.

|g-|를 반복하면 다음과 같이 바뀌는 것을 볼 수 있습니다:
	me too 
	one two 
	one too 
	one 

|g+|는 다시 시간 순으로 앞으로 움직입니다:
	one 
	one too 
	one two 
	me too 
	not two 

|:undo|는 어느 수정 사항으로 가야할 지 명확하게 알 때 편리합니다. 그리고
|g-|와 |g+|는 수정 사항 번호를 정확하게 모를 경우에 유용합니다 .

|g-|나 |g+| 앞에 숫자를 넣어서 여러 번 반복하도록 지정할 수도 있습니다.


*32.4*	시간 여행

한참 작업을 하다보면, 트리가 매우 커질 것입니다.  그러다가 갑자기 몇 분 전의
내용으로 돌아가고 싶어졌다고 합시다.

실행 취소 트리에서 어떤 분기들이 있는 지 보려면 다음 명령을 사용하십시오:

	:undolist
	number changes  time 
	     3       2  16 seconds ago
	     4       3  5 seconds ago

각 분기의 최하단 수정 사항의 번호와 이 수정이 언제 이루어졌는지를 보여줍니다.
현재 4번 수정 사항 밑 "not two"에 있다고 가정합시다.  다음 명령으로 10초
전으로 되돌릴 수 있습니다:

	:earlier 10s

문서를 고치는데 걸리는 시간에 따라 트리의 그 시간에 해당하는 위치로 이동하게
됩니다.  |:earlier| 명령의 인자는 "m"을 붙여 분(minute)단위로,
아니면 "h"를 붙여 시간(hour)단위로, 아예 "d"를 붙여 일(day)단위로 지정할 수도
있습니다.  아주 처음으로 돌아가고 싶다면 큰 숫자를 사용하면 되겠지요:

	:earlier 100d

다시 시간상 앞으로 되돌리고 싶다면 |:later| 명령을 사용하십시오:

	:later 1m

인자는 |:earlier|와 마찬가지로 "s", "m", "h"로 지정합니다.

좀 더 자세한 사항을 알고 싶거나 이 정보를 고치고 싶다면, |undotree()| 함수를
사용하면 됩니다.  이 함수가 뭘 반환하는지 확인해보세요:

	:echo undotree()



다음 장: |usr_40|  새로운 명령 만들기

저작권: |manual-copyright| 참고  vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2013. 12. 14. (토) 20:47:01 KST