<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.