*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