일반 모드를 벗어나지 않고 줄 바꿈을 삽입하는 방법


24

일반 모드를 벗어나지 않고 새 줄을 삽입 할 수 있는지 궁금합니다. 예를 들어 두 줄이 있습니다.

this is line one
this is line two

커서는 1 행에 있습니다. 이제 다음과 같이 한 줄과 두 줄 사이에 새 줄을 원합니다.

this is line one

this is line two

정상 모드에있을 때 간단히을 누를 수 있다는 것을 알고 있습니다 o. 그러나 이것은 삽입 모드로 들어갑니다.

새 줄을 삽입하고 일반 모드로 유지하려면 어떻게해야합니까?


답변:


10

나는 그것을 위해 매핑을 사용합니다 :

" Quickly insert an empty new line without entering insert mode
    nnoremap <Leader>o o<Esc>
    nnoremap <Leader>O O<Esc>

이 방법으로 커서 아래에 줄을 삽입 <Leader>o하고 이전 줄에 하나를 삽입 할 수 있습니다 <Leader>O.

참고 : 키 입력이 많이 필요 o<Esc>하지만이 유형의 매핑을 쉽게하기 위해 리더를 선택했으면합니다. 또한이 작업을 수행하는 기본 제공 방법이 있는지 확실하지 않습니다.


8

삽입 모드를 거치지 않고 커서를 움직이지 않으며 카운터를 사용하여 한 번에 여러 줄을 추가 할 수 있습니다 3\o.

nnoremap <silent> <leader>o :<C-u>call append(line("."),   repeat([""], v:count1))<CR>
nnoremap <silent> <leader>O :<C-u>call append(line(".")-1, repeat([""], v:count1))<CR>

5

개인적으로 Tim Pope의 Unimpaired 플러그인을 사용하는 것이 좋습니다 . 그것은 많은 매핑을 제공하지만 당신이 찾고 할 사람은 [<space>하고 ]<space>위의 각각 현재 행 아래에 빈 줄을 만들 수있다. Unimpaired는 또한 퀵 픽스 목록, 버퍼 목록, 옵션 토글 및 기타 여러 가지를 통해 이동하기위한 훌륭한 매핑을 제공합니다. 자세한 내용 :h unimpaired을 참조하십시오 .

손상되지 않은 플러그인을 사용하고 싶지 않지만 아래의 매핑과 같이 ~/.vimrc파일 에 넣을 빠른 매핑은 다음과 같습니다 .

nnoremap <silent> [<space>  :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space>  :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>

5

매핑을 추가하지 않으려면 yy빈 줄을 잡아 당겨 p커서 아래와 커서 P위에 붙여 넣을 수 있습니다 .


이것은 아마도 매핑이없는 가장 좋은 대답 일 것입니다.
Willem van Ketwich

또는로 o레지스터에 저장하고로 "oyy필요할 때마다 붙여 넣기하십시오 "op.
mike23

4

내 매핑은을 사용합니다 Shift-Enter. 커서가 마크 o를 사용하여 동일한 행 과 열로 리턴된다는 점에서 다른 점과 다릅니다 .

" Insert new line above without going into insert mode
" (uses mark o to return to the previous cursor column)
nnoremap <S-Enter> moO<Esc>`o

5
<S-Enter>터미널 에뮬레이터에서는 매핑 이 작동하지 않습니다 (gVim에서만 작동 함). 따라서 ;-)에 매핑하려면 다른 키 조합을 선택해야합니다.
Martin Tournoij

2

Maxim Kim의 답변 은 삶을 변화 시켰습니다.

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>

그리고 그것에 대한 나의 리프 :

noremap <silent> <s-space> :exe "normal a".nr2char(getchar())<CR>

에 해당 줄을 넣으십시오 vimrc. 그런 다음 파일 및 히트의 두 번째 줄의 시작 부분으로 이동 Space, Enter또는 첫 번째 줄과 히트의 끝으로 이동 Shift+Space, Enter. 첫 번째 줄과 두 번째 줄 사이에 빈 줄을 추가하고 일반 모드를 유지합니다.

이 키를 다른 단일 키에 사용할 수도 있습니다. 원하는 키를 누르 Space거나 Shift+Space키를 누르면 각각 삽입하거나 추가 할 수 있습니다.


2

이 매핑은 원하는 것을 정확하게 수행합니다.

nnoremap <c-n> @="m`o\eg``"<cr>
nnoremap <c-p> @="m`O\eg``"<cr>   

커서 앞뒤에 n 개의 줄 바꿈을 삽입합니다. 점프 목록을 변경하지 않고 커서를 원래 위치에 정확하게 유지합니다.

또 다른 해결책은 명명되지 않은 레지스터를 줄 바꿈으로 채우는 바로 가기를 만드는 것입니다. 그런 다음 put 명령 p 또는 P를 사용하여 줄 바꿈을 삽입 할 수 있습니다. 예를 들면 다음과 같습니다.

nnoremap "<cr> :let @@="\n"<cr>

1

이것에 대한 나의 매핑

 " Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>k
nnoremap <silent> zk O<Esc>j

이것은 커서를 동일한 위치에 유지하므로 스태 톡스 와 다릅니다 .


무슨 <silent>뜻입니까?
Alex

상태 표시 줄에 아무것도 에코되지 않습니다. 나는이 특별한 경우에는 아무것도하지 않는다고 확신합니다. 오래 전에 원래 복사 한 곳이 있었을 것입니다. 참조하십시오 :h map-silent.
Kevin

-1

내 개인 솔루션 은 개행 문자를 표현식 레지스터에 붙여 현재 줄 다음에 붙여 넣은 다음 원래 위치로 되돌아갑니다.

nnoremap K m`"="\n"<CR>p``
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.