여러 번 붙여 넣기


93

여러 줄을 클립 보드의 내용으로 바꾸는 가장 좋은 방법은 무엇입니까?

내가 가진 문제는 내가 한 줄을 잡아 당기고 다른 줄에 붙여 넣을 때 "yank"가 방금 교체 한 줄로 대체된다는 것입니다. 이제 다른 줄을 같은 줄로 바꾸려면 뒤로 돌아가서 다시 잡아 당겨야합니다.

이것을하기위한 더 나은 방법이 있어야합니다.

답변:


108

내 .vimrc에 다음이 있습니다.

xnoremap p pgvy

(참고 : 이것은 기본 레지스터에서만 작동하지만이 매핑은 기억하기 쉽습니다). 보다 정교한 버전을 작성할 수 있습니다. 또한 P를 사용하여 이전 동작을 얻을 수 있습니다.


28
영리한. 붙여 넣으려면 'p', 원래 선택한 항목을 다시 선택하려면 'gv'를 누르십시오. 다시 복사하려면 'y'.
Amjith

@SibbsGambling, 아마도 Vim 7 이전 버전을 사용하고 계십니까? 그런 다음 Vim을 업그레이드하거나 x ( vnoremap) 대신 v를 사용하십시오 . Vim 도움말 파일 version7.txt은 xmap과 smap이 해당 버전에 나타났습니다.
Benoit

1
@Benoit 흠, 나는 7.4.52, 그러나 어느 쪽도하지 xnoremap않고 vnoremap작품
Sibbs는 도박

8
이것이 기본 동작이 아닌 이유는 무엇입니까 ??
Seth

27

"0양크의 내용물이 있어야합니다. 타이핑하는 것은 조금 더 지루하지만 "0p원하는대로해야합니다.

또는 이전 라인을 앞에 선택하여 교체하지 마십시오. 검색으로 해당 줄을 찾으면 n.(이니셜 뒤에) 계속해서 p누른 다음 모두 붙여 넣을 때 필요한만큼 s를 수행하십시오.nddn.

Vim으로 옮길 때 제가해야 할 가장 큰 정신적 전환은 그룹 편집을 순차적으로 적용하는 방법을 알아내는 것입니다. 즉, 한 줄에서 여러 번 편집 한 다음 다른 줄에서 동일한 편집 작업을 수행하는 대신 여러 줄에서 첫 번째 편집을 수행 .한 다음 (큰 효과를 사용 하여) 두 번째 편집을 한 번에 수행합니다. 다른 방법으로 매크로를 사용하면 환상적이기 때문에 도움이 될 수 있지만 "복잡한"변경 사항으로 올바르게 작동하는 데 약간 더 지루할 수 있습니다.


2
확인 :%s/.../.../gc유형 명령을 사용 하는 정규식 이 원하는 것에 더 가까울 수 있는 곳처럼 들립니다
Milimetric

@Milimetric +1은 당신이 그렇게 확인할 수 있다는 것을 몰랐습니다.

1
매크로가 문제가되지 않을 수 있기 때문에 찬성합니다. 그냥 한 번에 편집을하고, 당신은 같은 것을 할 수있다 5@m(라는 매크로 m)
skatenerd

훌륭한 설명에 감사드립니다. 이제 나는 xnoremap p "0p~ / .vimrc
nexayq

13

나는 종종 다른 레지스트리를 사용하고 필요한 줄을 명명 된 레지스트리에 복사 "ay한 다음 거기에서 붙여 넣습니다."ap


11

Vim에서 선택 항목 위에 붙여 넣으면 기본 레지스터가 선택 내용으로 대체됩니다. 선택 영역에 붙여 넣으면 클립 보드 레지스터의 내용이 지워진다면 .vimrc에 다음 줄이있을 가능성이 큽니다.

set clipboard=unnamed

한 가지 옵션은이를 제거하고 명시 적 클립 보드 레지스터를 사용하는 것입니다. "+

또 다른 옵션은 명시 적으로 명명 된 다른 레지스터 (az)를 사용하는 것입니다. 첫 번째 붙여 넣기 후 "c예를 들어 라인을 다시 잡아 당기고 "cp거기에서 붙여 넣기 위해 사용 합니다.


실제로 기본값 (여기서는 Ubuntu)은 클립 보드 = autoselect입니다. 그래도 지금까지 가장 우아한 대답에 감사드립니다.
Tobu

8

use npwhere n는 줄을 붙여 넣으려는 시간 3p입니다. 예를 들어 3 줄을 붙여 넣습니다.


7
연속되지 않은 줄 위에 같은 줄을 붙여 넣으려는 경우에는 작동하지 않습니다.
Tobu

@Tobu하지만 '당신이 여러 번 붙여 어떻게'이 질문의 제목에 응답하지 않습니다
icc97

6

복사 / 붙여 넣기를 사용하는 대신 ciw내부 단어를 변경하는 것과 같은 텍스트 개체 명령을 사용하는 것이 더 좋습니다 . 이 방법은 .repeat 명령을 사용하여 쉽게 반복 할 수 있다는 장점이 있습니다 .

  1. yiw 내부 단어를 Yank (커서 아래에있는 단어 복사, "first"라고 말함).
  2. ... 커서를 다른 단어로 이동합니다 (예 : "두 번째").
  3. ciw<C-r>0 "두 번째"를 "첫 번째"(Ctrl-R)로 바꾸십시오.
  4. ... 커서를 다른 단어로 이동합니다 (예 : "third").
  5. . "third"를 "first"로 바꾸십시오.

1
ciw<C-r>0내 경우에는 작동하지 않습니다. 쓸모없는 ciw삽입 모드로 변경됩니다 <C-r>. 이것에 대한 쉬운 설명이 있습니까? (나는 RStudio에 PUR의 VIM하지만 VIM 키보드 바인딩을 사용하고 있지 않다) 문서 편집기와 함께 할 수 있었다는 것을
Bushroot

@Bushroot <C-r>는 삽입 모드에서 사용하기위한 것입니다. 삽입 모드를 벗어나지 않고 레지스터에서 붙여 넣는 방식이기 때문입니다. 즉, Vim에서; 나는 RStudio에 익숙하지 않지만 당신이 옳다고 생각하고 그들은이 특정 키 바인딩을 구현하지 않았습니다.
insectean

@Sean H : 네. 키 바인딩을 구현하지 않았습니다. VIM 및 다른 프로그램 (예 : Visual Studio Code)의 VIM 바인딩에서도 잘 작동합니다.
Bushroot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.