Vim에서 리두 (즉, "실행 취소"취소)는 어떻게합니까?


697

Vim에서는 실행 취소를 너무 많이했습니다. 이 작업을 어떻게 취소합니까 (즉, 다시 실행)?


106
나는 이미 2 개의 가까운 투표를 수집 했으므로 vim은 프로그래머의 편집자이므로 여기에 속한다고 생각합니다.
flybywire

28
나는 이것이 프로그래밍 관련 이며 실제 질문이라는 것에 동의합니다 .
DigitalRoss

41
커뮤니티가 오랫동안 Vim이 SO에 속해 있다고 결정 했음에도 불구하고 여기에있는 누군가가 돌아와서 모든 Vim 질문을 "SU에 속한다"라고 표시합니다.
Brian Carper

@ 브라이언 :이 합의에 도달 한 문서에 대한 링크가 있습니까?
너무 많은 php

12
meta.stackexchange.com/questions/20251/… 그러나 나는 작년에 이런 일이 떠오른 것을 기억합니다. Vim / Emacs는 IDE입니다. 또한 설정 파일에 사용 된 언어는 Turing-complete 스크립팅 언어이므로 Vim을 설정하는 작업은 그 자체로 프로그래밍됩니다.
Brian Carper

답변:


907

Ctrl+r


2
나는 단지 undoTree 플러그인을 버리고 싶습니다. 언두와 리도의 혼란으로 자신을 망쳐 놓은 것처럼 대단합니다.
Jake 판매자

3
vi에 대해 읽으면 손가락이 저절로 작동합니다. vi 명령은 stackoverflow에서 작동하지 않습니다. :-)
ciscogambo

2
Mac 사용자를위한 참고 사항 : Mac 터미널에서 Ctrl + r은 vim에서 하루를 망칠 것입니다. Mac 터미널에서 실행 취소 할 적절한 키 조합을 모르지만 Ctrl + r이 아닙니다!
tpartee

@tpartee 방금 macOS의 터미널 응용 프로그램에서 vim에서 Ctrl + r을 사용했습니다. 여기에 아무런 문제가 없습니다.
Jase

3
어쩌면 @ tpartee가 Cmd + r일을 망치는 것을 의미 했습니까? 확실히 이상한 일을합니다. 하지만 Ctrl + r그냥 나를 위해 잘 작동 (Mac + tmux + vim)
dwanderson

133

또한 :undolist실행 취소 기록을 통해 여러 경로를 제공 하는를 확인하십시오 . 너무 많이 실행 취소 한 후 실수로 무언가를 입력하는 경우에 유용합니다.


22
@amindfv : 178 단계로 되감기 위해 숫자를 :undolist입력하고 :undo 178(예를 들어) 입력하십시오 .
Peter

정확히 취소 할 대상을 표시하는 방법이 :undolist있습니까?
csharpfolk

2
@csharpfolk undotree 플러그인 사용 ( github.com/mbbill/undotree )

54

:earlier/를 사용하십시오 :later. 당신이해야 할 모든 것을 다시 실행하려면

later 9999999d

(최대 9999999 일 전에 파일을 처음 편집했다고 가정) 또는 현재 실행 취소 상태와 필요한 상태의 차이를 기억하는 경우 각각 Nh, Nm또는 Ns시간, 분 및 초를 사용하십시오. + :later N<CR><=> Ng+:later Nf파일 쓰기


1
:later나를 위해 일했습니다 vi(vim이 아닙니다-Google에서 "vi"를 검색했지만 모든 결과는 "vim"에 대한 것입니다). 감사합니다!
Luc

@Luc vi명령이있는 거의 모든 곳 에서 vim 실행 파일 또는 그 사본에 대한 심볼릭 링크입니다. 그러나 모든 곳이 아닙니다.
ZyX 2016 년

@ ZyX 그것이 사실이기를 바랍니다. bash가 a를 던진 후에 vi 만 사용합니다 vim: command not found. 다음으로 할 일은 alias vim=vi자동으로 입력하기 때문이지만 그럼에도 불구하고 평범한 오래된 vi입니다. 또한 vim의 별칭이 vi라면, redo (ctrl + r)가 제대로 작동했을 것입니다.
Luc

2
9999999d는 27395 년 전입니다. 그때 실행 취소 기능이 vi에서 구현되지 않았다고 가정합니다. 철저한 타이핑 노력을 줄이고 합리적인 수를 사용하고 싶을 수도 있습니다. 9999d는 약 27 년, 999d는 2.7 년에 해당합니다. 대부분의 경우에 충분하다고 생각합니다.
ChristophK

45

Vim 문서

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}


14

먼저 Esc 키를 편집 모드를 종료하십시오.

그때,

대한 실행 취소 , 사용u 키를 여러 번 당신이 취소 할 수 있습니다.

들어 다시 실행 , 사용 Ctrl+ r


11

Vim 문서"실행 취소"및 "다시 실행"부분을 참조하십시오 .

: red [o] (취소 된 한 변경 사항 다시 실행) 및 {count} Ctrl+ r(취소 된 {count} 변경 사항 다시 실행)는 모두 정상입니다.

또한 : earlier {count} (오래된 텍스트 상태 {count} 번으로 이동)는 항상 실행 취소 및 다시 실행을 대체 할 수 있습니다.


5

CTRL+r

"r"은 소문자입니다.


9
기존의 콘솔 사이에 구별이 없다 - 사실, 문제가되지해야 ^r하고 ^R, 그리고 빔은 다음과 같습니다.
ephemient

@ephemient : 동의했습니다. MS-DOS에서는 소문자를 입력 할 수도 없습니다 ^X(여기서는 X문자가 될 수 있음).
nyuszika7 시간

Vim에서 Ctrl-shift-R (대문자 R이있는 Ctrl)은 교체 모드입니다.
Paul Stelian

5

Visual Studio에 VsVim을 사용하십니까?

Visual Studio에서 Vim 명령에 대한 바인딩을 제공하는 VsVim을 실험 할 때이 문제를 발견했습니다 .

나는 알고있다 CtrlrVim 자체 있지만이 특정 바인딩은 VsVim에서 작동하지 않습니다 (적어도 내 설정에서는 그렇지 않습니까?).

무엇 합니까 그러나 일을, 명령입니다 :red. 이것은 위의 것보다 조금 더 번거롭지 만 실제로 필요할 때 여전히 좋습니다.


질문은 Visual Studio가 아닌 vim에 대해 구체적으로 묻기 때문에 하향 조정되었습니다.
존 폰 노이만

3
@JohnVonNeumann이가 되어 적어도 정력 바인딩에서 단지 VS.의 맥락에서, 빔 관련, 또는 그것은 결국이 질문에 나를 데려온 것입니다. 좀 더 많은 정보를 추가하기 위해 누군가를 처벌하는 것은 OP의 범위를 약간 넘어서도 조금 거칠고 불쾌한 것처럼 보이지 않습니다.
Kjartan

2

실제로 말하자면, 사용하기 :undolist가 어렵고 Vim :earlier:later시간 변경 추적은 코스 단위 수정에만 사용할 수 있습니다.

이를 감안할 때 이러한 기능을 결합한 플러그인을 사용하여 "건도 (Gundo)"라는 탐색 가능한 실행 취소의 시각적 트리를 제공합니다.

분명히 이것은 세밀한 수정이 필요하거나 반환하려는 문서의 정확한 상태가 확실하지 않은 경우에만 사용해야합니다. 참조 : 군도. Vim 실행 취소 트리를 스타일로 그래프로 표시

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