vim에서 편집 모드를 떠날 때 캐럿이 뒤로 이동하는 것을 방지합니까?


9

vim에서 아무것도하지 않고 편집 모드로 들어가서 나가면 캐럿은 왼쪽에 한 문자가됩니다. 그리고 추가 모드로 들어가서 나가면 캐럿이 앞뒤로 움직입니다.

이 경우 캐럿을 혼자 두도록 vim을 구성하는 방법은 무엇입니까?

이상적으로는 항상 추가 모드로 들어가고 싶지만 모드를 시작하거나 종료 할 때 캐럿을 이동하지 않습니다.

(현재는 삽입시 캐럿 위치를 엉망으로 만들지 않기 때문에 일반적으로 삽입 모드를 사용합니다. Esc 키를 누르고 추가 모드로 들어갑니다.)


1
이 질문에 대한 답은 좋습니다. i를 사용하여 편집 모드로 이동한다고 가정 한 것이 정확하다면 뒤로 이동하는 원인입니다. A가 아닌 'a'를 사용하면 예상대로 작동합니다.
johnny

@johnny 나는 그렇게 생각하지 않습니다. 나는 보통 "정상"모드에서 파일과 물건을 이동합니다. 편집해야 할 때 캐럿을 먼저 배치 한 다음 "a"를 누른 다음 오른쪽으로 이동하기 때문에 잘못 배치 한 것을 발견했습니다. 현대 편집자에서 편집 시간의 99 %를 소비한다는 점을 감안할 때 "a"를 누르기 전에 한 문자를 왼쪽에 배치하는 것을 기억하지 못할 것입니다. 그렇기 때문에 나는 매크로 나 무언가를 원했습니다.
RomanSt

습관의 문제입니다. 실제로 성가신 일이지만 첫 해에만 있습니다. 당신은 결국 언론에 배울 수 있습니다 i또는 a그것에 대해 생각하지 않고, 심지어는 할 수있다 s, S, ci", 등을 대신 제한의 ia.
Luc Hermitte

1
나는 당신의 좌절을 이해하지만. 대신하고있는 일에 대해 생각해보십시오. Vim을 일반 텍스트 편집기로 사용하는 것보다 더 나은 방법이 있는지 자문 해보십시오. 나는 Vim과 함께 항상 더 나은 방법, Vim 방식으로 일하는 것을 발견했습니다. 도와 드릴 수는 있지만 문제가 발생할 때 무엇을하고 있는지 알아야합니다. 예를 들어 무언가를 삭제하려고 할 때 편집 모드로 전환합니까? 문자를 삭제하기위한 'x'는 없습니다. 문자를 바꾸고 싶다면 'r'이 있습니다. 달성하고자하는 것을 생각하십시오.
johnny

@johnny 나는 당신이 말하는 것을 이해하지만, 나에게 이해하기에는 너무 많은 재 학습이 필요합니다. 편집 시간의 99 %를 Visual Studio에서 보내고 사랑합니다. 나는 이것을 다시 배우지 않을 것이라는 것을 알고 있으므로 시간 낭비하지 않습니다.
RomanSt

답변:


9

이 질문은 새로운 vi / Vim 사용자들 사이에서 자주 묻는 질문이며, 일반 모드에서는 커서가 항상 문자 위에 있지만 삽입 모드에서는 커서가 항상 두 문자 사이에 있다는 것입니다. 라인은 문자입니다). 콘솔 Vim에서도 실제로 그림을 볼 수는 없지만 GUI에서는 삽입 모드로 들어갈 때 커서가 일반 모드 일 때 문자 위에있는 블록 대신 두 문자 사이에 막대가되는 것을 알 수 있습니다.

여러분이보고있는 것은 삽입 모드를 떠날 때 커서가 한 문자 뒤로 이동하는 것이 아니라 단순히 문자 위로 이동하는 것입니다. 안전한 안전한 이동 방향은 왼쪽 (또는 뒤쪽)입니다. 따라서 삽입 모드로 들어가는 방법은 여러 가지가 있습니다.

  • "a"는 커서가있는 문자와 다음 문자가 오른쪽에있는 "사이에"커서가있는 삽입 모드로 들어갑니다.
  • "i"는 커서가있는 문자와 이전 문자가 왼쪽에있는 "사이에"커서가있는 삽입 모드로 들어갑니다.

어떤 사람들은이 "움직임"을 좋아하지 않기 위해 노력했지만, 나중에 플러그인이나 다른 Vim 스크립트를 방해합니다.

적절한 상황에서 "a"및 "i"(및 "A"및 "I") 명령을 사용하는 것이 좋습니다.

"o"및 "O"명령도 학습에 유용합니다. 보다:

:help a
:help i
:help A
:help I
:help o
:help O

편집 : 여전히이 동작을 변경하기로 결정한 경우이 팁을 시도 하십시오. 이스케이프가 커서를 한 문자 왼쪽으로 이동하지 못하게하십시오 .


1
나는 당신이 말하는 것을 이해하지만 "i"/ "Esc"/ "i"/ "Esc"는 캐럿의 실제 전체 순 이동을 유발합니다. 저는 VIM이 단순히 나를위한 것이 아니라고 생각합니다.
RomanSt

2
@romkyns : 당신이해야 할 일은 a대신에 사용하는 것입니다 i.
추후 공지가있을 때까지 일시 중지되었습니다.

1
@Dennis는 "a"는 캐럿이 첫 번째 문자 앞과 마지막 문자 다음 줄에있을 수 있기 때문에 조금 더 낫다고 동의했습니다. "i"는 임의로 허용하지 않습니다. 그러나 나는 그것을 시도했다. "a"를 누르기 전에 항상 캐럿을 잘못 배치하므로 캐럿을 즉시 왼쪽으로 한 위치 이동해야합니다. 매번. 피곤 해져서 "i"로 바 꾸었습니다.
RomanSt

@ 헵 타이트 당신은 아마도 움직임을 억제하는 무언가의 결함있는 구현을 지적 할 수 있습니까? 나중에 플러그인이나 다른 스크립트를 사용하고 싶을 가능성은 거의 없습니다.
RomanSt

1
@ romkyns, 그것은 (두 가지 모두) 작동하지 않습니다. 다시 매핑 <esc>하면 실제로 대부분의 플러그인이 <esc>올바르게 작동 하는 것을 막을 수 있지만, 동일한 방식으로 일반 모드로 돌아가는 다른 표준 기능을 사용할 때 계속 귀찮게합니다 <esc>. 올바른 키를 즉시 사용하는 법을 배우는 것은 장기적으로 확장 / 작동하는 솔루션입니다.
Luc Hermitte 2016 년

1

캐럿으로 커서를 의미한다고 생각하고 "i"를 사용하는 경우 커서가있는 곳에 직접 삽입 할 것이고 "a"(당신이 찾고 있다고 생각하는)는 커서를 한 문자 오른쪽으로 이동시킵니다. 또한 shift-i (I)는 줄의 시작 부분으로 이동하고 shift-a (A)는 줄의 끝 부분으로 이동합니다.

귀하의 질문을 이해하지 못한 경우 사과드립니다.


1

리매핑 <ESC>은 '위험한'것으로 간주 되므로 이스케이프 키 방지 방법 중 하나와 결합 하여 다음을 수행합니다 .vimrc.

 inoremap ii <ESC>l

참고 : 줄 끝에 공백 문자가 없는지 확인하십시오.

간단하지만 완벽하게 "나에게 잘 작동합니다"라는 인증을 받았기 때문에 손으로 직접 입력해야합니다.

여부 나 사용 a또는 i난 아직도 다시 동작을 이동 캐럿을 얻고 그것을 버그로 더 자주 그때 입력 할 다음 일은 아니다보다 나를 밖으로 지옥 d$라인 등의 끝까지 삭제


놀랍도록 간단한 솔루션. 내가 만난 최고.
Tyler Collier

1

내 해결책은 다음과 같습니다.

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

재밌 네요 SO, SU, Unix + Linux의 세 사이트 모두에 동일한 질문이 있습니다.


나는 그것을 재미있게 찾지 못한다 :) 다행히도 나는 견과류 (diakonos)를 운전하지 않는 편집기를 찾았으므로 더 이상 문제가되지 않습니다. 여전히 vim을 좋아하는 사람들을 위해 찬성했습니다.
RomanSt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.