<Esc> 다음에 커서가 줄의 시작 부분으로 이동하는 이유는 무엇입니까?


12

삽입 모드에서 .txt 파일의 줄을 따라 편집하는 동안 키 시퀀스를 사용하여 쓰기 후 커서가 줄의 시작 부분으로 이동합니다.

<esc>:w

커서가 : write 다음에 위치에 있도록이 동작변경 하고 싶습니다 . 이게 가능해? 커서를 삽입 모드로 유지할 필요가 없으며 쓰기 후 마지막 위치를 유지하기를 원합니다.

Windows에서 gVim 7.4를 사용하고 있습니다. 내 .vimrc는 매우 기본적이며 내 설정이이 동작을 방해한다고 생각하지 않습니다. 또한 공식 vim.org Windows 설치 프로그램과 함께 제공되는 .vimrc에서 mswin.vim 및 example.vim의 소싱을 제거했습니다.

아래의 주석을 읽은 후에 나는 문제를 다시 보았고 완전히 후행 공백으로 구성된 줄에 쓴 후에 커서가 맨 왼쪽으로 미끄러지는 것을 알았습니다. 다시 말해서, 줄이 공백 외에 다른 문자가없는 들여 쓰기 인 경우 커서 는 esc- : w에서 맨 왼쪽으로 슬라이드합니다 . .vimrc는 다음 설정으로 들여 쓰기 동작을 처리합니다.

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent 

따라서 들여 쓰기 된 줄 아래에 생성 된 새 줄에는 줄의 처음 4 개 공백으로 4 개의 후행 공백이 포함됩니다 (보존하고 싶습니다). 'esc'키를 누르면 커서가 버퍼의 가장 왼쪽으로 움직입니다.

'esc'를 눌렀을 때 커서 위치를 유지하여 후행 공백으로 구성된 줄에서 들여 쓰기로 정상 모드로 돌아갈 수 있습니까?


3
나는 어떤 플랫폼에서나 Vim에서이 동작을 보지 못했다 ... gVim을 다음과 같이 시작하면 어떻게됩니까 : gvim -u NONE -U NONE(cmd.exe를 사용하거나 단축키를 만들 수 있습니까)? 이는 (g) vimrc 파일을로드하지 못하게합니다.
Martin Tournoij

1
그것은 당신의가 전체 의 vimrc 파일? 내 첫 번째 의심은 vimrc 파일의 autocmd가 후행 공백을 제거한다는 것입니다. vimrc 파일없이 gVim을 시작할 때 동작이 변경됩니까 (위 주석 참조)?
Martin Tournoij

위의 내용은 완전한 .vimrc가 아니며 다른 설정도 있습니다. .vimrc (: scriptnames는 .vimrc 또는 .gvimrc를 표시하지 않음)없이 gVim을 실행하면 문제가 해결됩니다. 당신은 절대적으로 맞습니다. 내 .vimrc 또는 이것을 일으키는 원인이되는 다른 것을 살펴 봐야합니다.
Jim

분명히 새로운 라인에서 공백을 제거하는 것이 바람직한 동작입니다. 여기서 파일을 공백으로 깨끗하게 유지해야합니다.
Jim

그것은 새로운 줄을 여는 것입니다 ... 파일에 쓰는 것이 아니라?
Martin Tournoij

답변:


11

자동 들여 쓰기에 대한 설명서를 보면 그 문제를 해결하는 방법과 방법에 대한 답변이 있습니다. :help 'autoindent':

새 줄을 시작할 때 ( <CR> 삽입 모드에서 입력 하거나 "o"또는 "O"명령을 사용할 때) 현재 줄에서 들여 쓰기를 복사 하십시오. 새 행에 <BS>or를 제외한 아무 것도 입력하지 않으면 , 또는 CTRL-D을 입력 하면 들여 쓰기가 다시 삭제됩니다. 'cpoptions'에 'I'플래그가 포함되어 있지 않으면 커서를 다른 행으로 이동해도 동일한 효과가 있습니다.<Esc>CTRL-O<CR>

즉, 당신이 원하는 경우는 들여 쓰기를 입력 잃지하는 무언가를 한 다음 백 스페이스 전에 타격 Esc및 선행 공백이 유지됩니다.

또는 삽입 모드로 돌아가서 사용할 때 들여 쓰기 수준으로 돌아가 'cindent'려면 Shift-S대신 i(이미 비어 있음) 줄을 지우고 적절한 들여 쓰기 수준에서 시작하십시오. 이것은 위의 솔루션만큼 일반적인 해결책은 아니지만 C 코드를 작성할 때 이것을 선호하므로 파일이 실제로 공백 전용 줄로 저장되지 않습니다.


이것은 원본 문서에서 내 질문에 대한 결정적인 답변입니다. 요약과 이야기에 감사드립니다-나는이 정보에 대해 : h 자동 들여 쓰기를 고려하지 않았습니다. 솔루션으로 이어지는 토론에 대해 @Carpetsmoker에게도 감사드립니다.
Jim

이것은 삽입 모드를 떠나지 않고 들여 쓰기를 유지하기 위해 o와 O를 다시 매핑하는 문제를 해결했습니다. 이 작업을 수행 nnoremap o o <BS><Esc><DEL>하면됩니다.nnoremap O O <BS><Esc><DEL>
Max Coplan

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