마지막 편집 위치로 어떻게 이동합니까?


68

나는 종종 큰 파일의 중간 부분을 변경 gg하고 맨 위로 이동하여 무언가를 확인한 다음 편집하는 위치에 마크를 설정하는 것을 잊어 버렸습니다. 마지막으로 변경된 라인의 위치로 이동할 수있는 기본 제공 방법이 있습니까?

답변:


84

`.명령은 마지막 변경으로 당신을 가져올 것입니다.

`마크에 가고, .자동으로 마지막 변경이 된 위치로 설정되어 "특별한"마크입니다. 자세한 내용 :help `.은 참조하십시오.

``마지막 점프를하기 전에 커서가 있던 위치로 되돌아 갈 수도 있습니다 . 자세한 내용은 : help`` 를 참조하십시오.

또 다른 유용한 마크는 `^; 삽입 모드가 중지되었을 때 커서가 마지막으로 있었던 위치입니다. 참조하십시오 :help `^.

참조 :help mark-motions(자동으로 설정됩니다 다른 "특별한"부호를 포함하여) 마크를 사용하는 방법에 대한 좀 더 일반적인 정보를 원하시면.


7
당신은 또한 사용할 수 있습니다 g;g,변경 목록에 위치 사이에서 이동합니다. 보기 :h g;:h g,
피터 Rincker에게

3
(backtick) '대신 (apostrophe)를 사용할 수도 있습니다 `.
Sparhawk

21

주어진 시나리오에 맞는 다른 접근 방법이 gg있으며 마지막으로 변경된 줄이 아니라 바로 이전 위치로 이동합니다 .

사용하다 CtrlO

당신이 키를 누르면 gg, 이전 커서 위치는 푸시됩니다 점프 목록 . 보낸 사람 :help jumplist:

점프는 점프 목록에 기억됩니다. CTRL-Oand CTRL-I 명령을 사용하면 이전 점프 전에 커서 위치로 이동했다가 다시 돌아갈 수 있습니다. 따라서 목록을 위아래로 이동할 수 있습니다. 각 창마다 별도의 점프 목록이 있습니다. 최대 항목 수는 100으로 고정되어 있습니다.

[…]

점프 명령을 사용하면 현재 줄 번호가 점프 목록의 끝에 삽입됩니다. 동일한 행이 이미 점프 목록에 있으면 제거됩니다. 결과적으로 반복 CTRL-O하면 이전 위치로 한 번만 돌아갑니다.

이 기능을 사용하려면 Vim (vi가 아님)을 사용해야 +jumplist합니다. 경우 :echo has('jumplist')인쇄 1, 당신은이를 사용할 수 있습니다.


19

dnetserr의 답변과 Peter Rincker의 의견에 추가하기 위해 Vim은 변경 사항 목록을 유지하며 이와 관련된 명령이 있습니다.

:changes

변경 사항을 나열하여 변경 내용과 위치를 표시합니다. 예를 들면 다음과 같습니다.

change line  col text
    2     8   17 #include <stdio.h>
    1     3    0 #include "stm32f407.auto.h"
>

표시가있는 줄 >은 변경 목록에서 현재 위치를 보여줍니다. 점프 목록 ( :jumps) 또는 태그 스택 ( :tags) 과 같은 종류입니다 . 점프 목록 및 태그 스택과 마찬가지로이 목록을 탐색 할 수 있습니다.

일반 모드에서는 동작이 g;이전 변경 위치 g,로 이동하고 다음 위치 로 이동합니다. 목록에서 해당 변경 이전 g;또는 변경 g,으로 이동할 변경 수를 입력 할 수도 있습니다 . 위에서 2g;stdio.h와 관련된 변경이 발생한 위치로 이동합니다.

스택 중간에있을 때 :changes상대 거리를 표시하기 위해 숫자가 업데이트됩니다. 예를 들면 다음과 같습니다.

change line  col text
    1     8   17 #include <stdio.h>
>   0     3    0 #include "stm32f407.auto.h"
    1    10    4 other

이것은 내가 다시 하나 (갈 수 있다는 것을 보여준다 1g;하거나 g;) 또는 앞으로 하나 ( 1g,또는 단지를 g,).

변경하고자하는 변경 사항이 실제로 몇 번 전에 발생한 경우에 유용합니다.

이것의 단점은 정상적인 동작처럼 보이지 않는다는 것입니다. 예를 들어, 당신은 할 수없는 dg;반면, 이전의 변경 위치로 커서에서 삭제 d'.하고 d'^운동으로 일을.


15

g; 이전에 편집 한 줄로 이동합니다.


3
g, (쉼표)를 사용하여 최신 편집 위치로 이동할 수도 있습니다.
제임스

5

Vi의 실행 취소 명령은 마지막 명령이 실행 취소되었을 때 다시 실행되는 uu역할 을하기 때문에 마지막으로 편집 한 위치로 되돌아가는 수단으로 사용 되었습니다.

당신이 빔을 실행하는 경우 nocompatible(대부분의 사람들이하는 것처럼) 세트, 당신은 사용하려는 u다음에 CTRL+R실행 취소 및 다시 실행합니다. 그렇지 않으면 uuVi에서와 같이 작동합니다.


그것은 않을 경우 :set nocompatible사용되지 않습니다.
muru

2
vim(와하는 nocompatible) 두 개의 실행 취소를하지 않습니다 uu,하지만 난 사용 uCTRL+r같은 효과.
Shahbaz

이 답변은 Aix / HPUX / Solaris / other Unix 변형에 vim이없는 경우 vi에서도 작동한다는 이점이 있습니다.
Guntram Blohm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.