vim으로 새 줄에 붙여 넣는 방법?


144

나는 종종 vim의 새로운 줄에 물건을 붙여 넣어야합니다. 내가 보통하는 일은 :

o<Esc>p

새 줄을 삽입하고 삽입 모드로 전환하여 삽입 모드를 종료하고 마지막으로 붙여 넣습니다.

세 번의 키 입력. 매우 효율적이지 않습니다. 더 나은 아이디어가 있습니까?


8
3 번의 키 입력이 비효율적입니까?
gtd

60
1 또는 2가 더 낫습니다 :) 최대 효율을 위해 vim을 사용하지 않는 이유는 무엇입니까?
static_rtti

2
또한 복사 된 내용이 개행으로 끝나는 경우 추가 개행이 발생합니다.
Jonathan W.

1
@gtd 일반 편집기는 <Enter> <CV>와 함께 작동합니다. 두 번의 키 입력.
user4052054

1
@ user4052054 아니오, 그것은 똑같은 일을하지 않습니다 .o / O는 라인 어디에 있든 작동합니다. 일반 편집기에서는 라인의 시작 또는 끝 부분에 먼저 도달해야합니다. 또한 전체 줄을 복사하는 경우 모든 것이 줄을 삽입하는 한 번의 키 입력이되어 코딩에서 훨씬 더 일반적인 제안입니다.
gtd

답변:


71

:help p그것이 말한 직후 :

:[line]pu[t] [x]    Put the text [from register x] after [line] (default
                    current line).  This always works |linewise|, thus
                    this command can be used to put a yanked block as
                    new lines.

:[line]pu[t]! [x]   Put the text [from register x] before [line]
                    (default current line).

불행히도 다른 답변에서 제안한대로 키보드 맵과 결합하지 않으면 현재 솔루션보다 짧지 않습니다. 예를 들어, 아무 키나 (조차 p) 매핑 할 수 있습니다 .

:nmap p :pu<CR>

2
나는 그것을 알고 그것을 사용하지만, 내가 요구하는 것은 아닙니다. 때로는 복사하는 것이 LF를 가지고 있지 않기 때문입니다. "새 줄에 붙여 넣기"명령이 있으면 붙여 넣으려는 내용에 관계없이 작동하므로 생각할 필요가 없습니다.
static_rtti

5
좋아, :pu[t]현재 줄 뒤에 :pu[t]!텍스트를 새 줄에 넣고 현재 줄 앞에 텍스트를 새 줄에 넣습니다. 이에 따라 답변을 편집하겠습니다. (Hooray for :help p.)
Bombe

2
현재 솔루션보다 낫지는 않지만 내 질문에 대한 가장 좋은 대답이라고 생각합니다.
static_rtti

4
같은 수의 키 입력이 있지만 더 효율적이라고 생각합니다. o <Esc> p는 울퉁불퉁하지만, 그렇지 않습니다.
Mark Story

2
p를 포함하여 모든 키에 명령을 매핑 할 수 있습니다. :nmap p :pu<CR>.vimrc 파일에 넣고 끄십시오. :)
Capi Etheriel

55

옵션 :

1) yy전체 줄을 잡아 당기려면 사용하십시오 (줄 끝 문자 포함). p그런 다음 현재 줄 다음에 줄을 붙여넣고 P( Shift- P) 현재 줄 위에 붙여 넣습니다.

2) 매핑을하십시오. 그러면 하나 또는 두 개의 키 일뿐입니다.

:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p

3) 매핑의 함수 버전 (실제로 불필요하지만 완전성을 위해) :

:nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap

2
글쎄, 나는 매핑을 할 것 같아. 나는 단지 표준 솔루션이 있기를 바랐습니다 :-/ 귀하의 답변에 감사드립니다!
static_rtti

2
@ AI : ', p'( ','는 내 <Leader>로 매핑 됨)를 사용하는 것이 내 의견으로는 가장 좋은 해결책입니다. YOu는 사용하기 쉬운 기능도 제공했습니다. :) 좋아!
누군가 아직도 당신을 사용합니다 MS-DOS

30

붙여 넣을 버퍼 <C-R>이름을 사용하여 삽입 모드 에서 버퍼를 붙일 수 있습니다. 기본 버퍼는입니다 ".

o<C-R>"

나는 <C-R>"매우 자주 사용하고 그것을 <C-F>내 vimrc에 묶은 것을 발견했다 .

inoremap <C-F> <C-R>"

2
복사 된 줄을 들여 쓰지 않은 경우 들여 쓰기를 올바르게 유지하기 때문에 좋습니다.
CornSmith가

24

이것은 여전히 ​​세 번의 키 입력을 사용하지만 Esc보다 쉽습니다.

o<Alt-p>

o를 누른 후 삽입 모드에 있으므로 Alt 수정자를 사용하면 명령을 사용하지 않은 것처럼 사용할 수 있습니다.


2
당신이 yank sth를 시도 할 때 아주 편리한 방법은 새로운 줄에 "d $"로 줄을 잘라
Serhat Cevikel

죄송하지만 들여 쓰기를 유지하지는 않지만 대신 줄의 시작 부분에 붙여 넣습니다.
Michael Goldshteyn

누구든지 mac (no alt)에 대해이 방법을 정교하게 할 수 있습니까?
리튬 haonan

귀하의 질문 8 개월 전부터입니다 @Lihaonan, 희망 당신은 이미 보았다 stackoverflow.com/q/7501092/5407634
m_mlvx

12

이 플러그인 사용 : https://github.com/tpope/vim-unimpaired

]p아래 줄에 붙여 넣기

[p 줄에 붙여 넣기

장점 :

  • 모든 구부러진 텍스트 (단어, 줄, 문자 등)에서 작동
  • 붙여 넣은 텍스트를 들여 쓰기하여 주위의 텍스트 들여 쓰기
  • 3 개 및 많은 "더 쉬운"스트로크 대신 2 개의 키 입력
  • 빠른

1
내가 좋아하는 것. tpope/vim-unimpaired이것이 작동하기 위해서는 당신이 필요하다고 언급 할 가치가 있습니다 .
alextes

1
아 너무 오래 전에 설치했는데 잊어 버렸습니다. 알림 주셔서 감사합니다!
crogers

9

개인적으로 다음과 같이 Enter (CR)를 사용했습니다.

nmap <CR> o<Esc>k

Vim Wikia 기사를 기반으로 합니다 .

이렇게하면 일반 모드에서 직접 줄 바꿈을 할 수 있으며 아래의 줄 바꿈에 붙여 넣기를 원합니다.

<CR>jp

Enter 에서 선호하는 기능에 따라 위의 nmap에서 k 를 건너 뛸 수 있으므로 그냥<CR>p .

나는 또한 jj를 Esc에 이식 했는데이 경우에도 도움이 될 것입니다. Esc 가 vim에서 얼마나 중요한지 홈 행에서 너무 멀리 떨어져 있습니다.

다른 솔루션보다 짧지는 않지만 일부 솔루션보다 덜 울퉁불퉁하다고 생각하며 다른 용도도 있습니다.


5

전체 줄을 복사 한 다음 전체 줄을 붙여 넣는 Y경우 먼저 줄 바꿈을 포함하여 줄을 잡아 당겨 p붙여 넣습니다. 비주얼 모드의 일반과 달리 V비주얼 라인 모드 인을 사용할 수도 있습니다 v.


3
문제는 때로는 때로는 전체 줄을 복사하고 싶지 않다는 것입니다 ... 열 줄이나 두 단어를 복사했는지 여부에 관계없이 솔루션을 원합니다.
static_rtti

3

매핑이 inoremap jj <ESC>있습니다. 그래서 새로운 줄을 삽입이 용이 ojj하고 Ojj다음 p.

그래서 ojjp새로 만들기 줄 바꿈을 붙여 넣습니다. 그러면 한 번 더 뇌졸중이 o<esc>p있지만 ojjp나에게는 쉽습니다.


2

나는 이것에 대한 우아한 해결책을 찾았습니다. yank 레지스터를 OS의 클립 보드에 넣는 경우 (어쨌든 좋습니다)

set clipboard+=unnamed

당신이 할 수있는 것보다 o<Ctl-v>.

적은 획일 o<Esc>p:pu아니라 들여 쓰기를 유지하기 때문에 두 가지 모두에서 향상됩니다 . 다른 옵션은 모두 새 줄에서 문자 0부터 시작합니다.

주의 사항은 OS에 따라 다를 수 있습니다. 내가 아는 전부는 최신 버전의 OS X에서 작동한다는 것입니다. 그러나 클립 보드는 OS 클립 보드에 얽매이는 많은 방법 중 하나 일뿐입니다.



1

Neovim 설정에서 다음 매핑을 사용합니다.

nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``

약간의 설명 :

  • m`: 현재 커서 위치에 마크를 설정합니다.
  • o<Esc>p: 아래에 새 줄을 만들고이 줄에 텍스트를 붙여 넣습니다.
  • O<Esc>P: 위에 새 줄을 만들고이 줄에 텍스트를 붙여 넣습니다.
  • ``: 커서를 원래 위치에 놓습니다.

:h markVim의 마크에 대한 자세한 내용을 참조하십시오 .


1

삽입 모드를 유지하려면 다음을 수행하십시오. o ctrl+o p

  • o – 삽입 모드 및 새로운 라인으로 이동
  • ctrl+o – 일반 모드와 같은 단일 명령 실행
  • p – 풀

세 번의 키 입력이지만 삽입 모드를 유지하고 o ctrl+o매우 빠르므로 개인적으로 2.5 키 입력으로 취급합니다.


0

이 솔루션은 복사 된 텍스트 블록이 새 줄에서 시작될 때만 적용되는 것처럼 보이지만 (한 줄 내에서 텍스트 조각을 가져 오는 것과는 대조적으로) 항상 잡고 싶은 마지막 문자에서 복사본을 시작한 다음 탐색 할 수 있습니다 원하는 복사 블록을 시작하기 전에 줄 끝의 마지막 문자로. 그런 다음 붙여 넣을 때 텍스트를 붙여 넣을 행의 끝에 커서를 놓고 p를 누르십시오. 설명을 망치지 않으면 원하는 결과를 얻을 수 있습니다.

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