‘ESC’가 커서를 vim으로 다시 이동시키는 이유는 무엇입니까? 문자 왼쪽으로 이동합니다. 이것은 내가

vim에서 ESC명령 모드로 돌아 가려고 누르면 커서가 한 문자 왼쪽으로 이동합니다. 이것은 내가 바라는 것이 아니며, 때때로 나는 즉시 l그 자리로 돌아가서, 아마도 캐릭터를 삭제하기 위해 맞았습니다 .

이 동작에 대한 이유가 있습니까? 누락 된 사용법 패턴에 편리합니까?



답변

삽입 모드에서 커서는 문자 사이 또는 첫 문자 앞이나 마지막 문자 앞입니다. 일반 모드에서 커서는 문자 위에 있습니다 (줄 바꾸기는이 목적을위한 문자가 아닙니다). 이것은 다소 이례적인 일이다 : 대부분의 편집자는 항상 문자 사이에 커서를 놓고, 대부분의 명령은 캐릭터에 따라 행동이 (하지, 엄밀히 말하면, 아래 ) 커서. 이 GUI를하기 전에, 텍스트 단자는 항상 아마 사실에 부분적으로 기인 했다 문자 (아마 깜박 블록 밑줄 또는)에 커서를. 이 추상화는 삽입 모드에서 실패합니다 (포스트 대 펜스).

모드를 전환하려면 커서를 반자 씩 움직여야합니다. i왼쪽 명령 이동은 끝났다고 문자하기 전에 커서를 넣어. a명령 바로 이동합니다. 삽입 모드를 종료하면 (을 누름 Esc) 커서가 가능한 경우 왼쪽으로 이동합니다 (행의 시작 부분에 있으면 대신 오른쪽으로 이동).

나는 Esc행동이 말이 된다고 생각합니다 . 종종 줄 끝에서 입력하고 Esc왼쪽으로 만 갈 수 있습니다. 따라서 일반적인 행동이 가장 일반적인 행동입니다.

커서 아래의 문자를 마지막으로 재미있는 문자로, insert 명령을로 생각하십시오 a. a Esc비어 있지 않은 줄의 시작 부분에서 시작하면 한 위치에 충돌하는 것을 제외하고 커서를 움직이지 않고 반복 할 수 있습니다.


답변

시각적으로 gvim에서 더 의미가 있습니다.

편집 할 때 커서는 문자 사이에 있습니다.

일반 모드에서는 마지막 문자 위에 있습니다.

그래서 정말 그냥되는 것을, 문자를 다시하지 않는 사이 rs인에 r


답변

이 행동은 here 응답 된대로 편집 할 수 있지만 잠시 멈추고 생각 하십시오 . 삽입 모드에있을 때 실제로 문자 위에있는 것이 아니라 문자 사이에있는 것입니다. 무언가를 삽입하면 커서가 삽입 한 것의 끝으로 이동하여 다음에 삽입 된 것이 그 다음에옵니다. 이제 방금 편지를 입력 한 후 무언가를하고 싶었는지 생각해보십시오. 타격 Esc하면 선택 커서가 마지막으로 삽입 한 문자 바로 위에 놓입니다. 그렇게하지 않으면 실제로 어색 할 것입니다.

아마도 여러분이 생각하고있는 상황은 삽입 모드에있을 때 마치 일반 모드 인 것처럼 움직 인 다음 전환하는 것입니다. 이 경우 커서는 한 문자 뒤로 이동하는 것처럼 보이지만, 그렇게 생각하면 삽입 모드에 있고 마지막으로 삽입 한 것이 아니라고 표시됩니다. 일반 모드에서 더 많은 시간을 보내야합니까?


답변

Alt+ L를 입력 하여 명령 모드로 돌아갑니다.

다시 매핑 또는 vim 구성 변경이 필요하지 않습니다. 대부분의 터미널 에뮬레이터에 있기 때문에 작동 Alt+ KEY전송 Esc다음에 KEY(당신은 추가해야 할 수도 있습니다 xterm을에 Xterm*metaSendsEscape: true당신의 ~ / .Xdefaults를 파일에 라인). 이 동작을 통해 Alt+ S에서 와 같이 상자에서 바로 작동하는 다른 삽입 모드 조합을 “생성”할 수도 있습니다 Backspace.

그런데 방금 쓴 캐릭터 위에 커서를두면 매우 불편할 수 있습니다. 예를 들어, Escdw방금 삽입 한 텍스트 다음에 나오는 단어는 삭제하지 않습니다.


답변

여기 내 해결책이 있습니다.

Wikia 페이지 에서 제공되는 솔루션의 더 간결한 버전입니다 .

au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])