vim-현재 붙여 넣기 버퍼를 사용하여 '변경 단어'를 수행하는 방법


86

붙여 넣기 버퍼에 텍스트가 있습니다. 예를 들어 yw(잉크 단어)를 했는데 이제 버퍼에 'foo'가 있습니다.

이제 'bar'라는 단어로 이동하여 붙여 넣기 버퍼로 바꾸고 싶습니다.

텍스트를 수동으로 바꾸려면 할 수 cw있고 새 단어를 입력하십시오.

'변경 단어'를 수행 할 수 있지만 대체 단어를 수동으로 입력하는 대신 붙여 넣기 버퍼의 내용을 사용하려면 어떻게해야합니까?

내가 지금 가지고있는 가장 좋은 옵션은 바꾸고 싶은 단어의 시작 부분으로 이동하고 dw(단어 삭제) 다른 장소로 이동하여 yw(잉크 단어)를 수행 한 다음 교체 영역으로 돌아가서 수행하는 것입니다 p(붙여 넣기) 이것은 같은 화면에 있지 않은 경우 특히 어색합니다.

답변:


120

옵션 1

레지스터를 사용하여 프로세스를 수행하고 키 바인딩을 만들 수 있습니다.

바꾸려는 단어를 Yan yw.

yanked 단어는 0당신이 발행하여 볼 수 있는 레지스터에 있습니다 :registers.

바꾸고 싶은 말로 가십시오 cw. 마 Ctrl+ r다음에 0붙여 넣기하는 0레지스터.

이를위한 맵은 다음과 같이 보일 것입니다 ( Ctrl+ j를 콤보로 가정 ) :

:map <C-j> cw<C-r>0<ESC>

옵션 2 (더 단순)

단어가 쇠약 한 상태에서 바꾸고 싶은 단어 위로 커서를 이동하십시오 viwp. 시각적으로 내부 단어를 선택하여 붙여 넣습니다.

의견에 @tlo가 제공했습니다 : 당신은 또한 할 수 있습니다 vep. 하나의 문자가 짧습니다. 단점은 단어의 시작 부분에 커서를 놓고 버퍼를 변경해야합니다.

코멘트 (Michael) :

이거 좋다 추가 참고 사항 : 두 번째 방법은 실제로 더 쉽지만 각 교체 후에 버퍼가 교체 된 필드 (이전 텍스트)로 변경되기 때문에 ONE 대체에만 작동합니다. 첫 번째 방법은 사용하기가 조금 어렵지만 버퍼 0은 '있는 그대로'유지되므로이 방법을 사용하여 동일한 텍스트를 두 번 이상 교체 할 수 있습니다.


14
옵션 3 (보다 간단 함) : 단어가 쇠약해진 상태에서 바꾸고 수행하려는 단어의 첫 문자 위로 커서를 이동합니다 vep.
tlo

변경할 단어가 하나 뿐인 경우 옵션 3이 마음에 듭니다. 변경할 단어가 둘 이상인 경우 옵션 1을 사용하여을 사용할 수 있습니다. 연산자 반복 ..
typelogic

3
ve"0p변경을 반복 할 수 있도록 노력하겠습니다
JKillian

그것을 무언가에 매핑하려는 경우 아마 사용 map <C-j> ciw<C-r>0<ESC>하는 것이 좋습니다 : 그래서 당신이 누르는 단어의 어느 곳에서나 중요하지 않습니다 ^j.
폴 파커

CTRL-R이 왜 마법인지 알고 싶은 사람은 CTRL-R :help insert을 검색하십시오 /CTRL-R. ve"0p작동 방식 은 다음을 참조하십시오.:help registers
Paul Parker

12

yw단어를 잡아 당기려면 커서를 바꾸려는 단어로 커서를 옮기고 "_dw삭제하는 데 사용 하여 텍스트를 null 레지스터로 보냅니다 (따라서 "기본적으로 yanked / cut 텍스트가 있는 레지스터 의 내용을 덮어 쓰지 않습니다) )를 사용한 다음 붙여 넣기 만하면됩니다 p.

다음 매핑을 사용하여 작업을 좀 더 쉽게 할 수 있습니다.

nnoremap <leader>d "_d

... 일반 모드에서는 레지스터에 \dw영향을주지 않고 단어를 삭제하는 데 사용할 수 있습니다 ".


3

이를 VIM 방식으로 수행하려면 의도적으로 yank, delete 및 기타 레지스터를 사용합니다.

레지스터 "0는 yank 레지스터입니다. 당신이 잡아 당기는 것은 여기에 놓일 것이지만, delete는 register를 터치하지 않습니다 "0.

그래서 당신의 예에서, 당신은 한 마디를 yan습니다. 단어를 방금 변경 한 단어로 바꾸려면 yank 레지스터를 건드리지 않는 삭제를 활용하십시오. 그래서 그것을 삭제 대상 단어로 이동 dw한 다음에 십중팔구는 등록에서 붙여 넣기 "0p, 더 나은 아직, 또는 cw다음 ^R0(반복되는).

yank 레지스터의 반대쪽에는 작은 삭제 레지스터가 "-있습니다. 작은 삭제 또는 변경 제거는 여기에 있지만 yan 크는 절대로 만지지 않습니다 "-. 전체 줄보다 작 으면 삭제가 작은 것으로 계산됩니다.

레지스터 "1- "9삭제 히스토리 레지스터입니다. 와 "1최신 큰 삭제 또는 변경 제거를 포함하고, "9가장 오래된 대형 삭제 또는 변경 제거를 포함. 작지 않은 삭제, 즉 한 줄 이상의 삭제 만 "1-에 푸시 "9됩니다.

레지스터를 변경하는 작업의 경우 사본은 항상 기본 이름이없는 register에 배치됩니다 "". 레지스터의 이름을 명시 적으로 지정하지 않은 경우 사용되는 레지스터입니다.

레지스터 "_는 블랙홀 레지스터이며 항상 비어 있습니다. 삭제하면 기본 ""레지스터 나 블랙홀 레지스터 자체가 아닌 모든 레지스터의 아무것도 변경되지 않습니다 . 삭제 한 텍스트는 실행 취소 기록과 별도로 완전히 사라졌습니다. 블랙홀 레지스터에 대한 양키 또는 붙여 넣기는 본질적으로 아무 것도 수행하지 않습니다.

블랙홀 레지스터를 "_사용하면 첫 번째 작은 삭제와 "_작은 삭제 레지스터를 변경하지 않고 여러 개의 다른 삭제를 수행 "-한 다음 첫 번째 작은 삭제를 붙여 넣을 수 있습니다.

다른 레지스터는 마지막으로 삽입 된 레지스터이다 "., 파일 이름 레지스터 "%"#명령 레지스터 ":, 검색 레지스터 "/와 표현 레지스터 "=.

명령으로이 모든 레지스터와 그 내용의 목록을 얻을 수 있습니다 :register. 이 명령은 무엇을 끝내고 실험하고 배우는 데 매우 유용합니다.


2

나는 이것을 너무 자주 필요로하며, 최대 속도를 단순화하고 허용하는 플러그인을 작성했습니다 : ReplaceWithRegister .

이 플러그인은 gr{motion} / text 객체, 전체 줄 또는 현재 선택 항목이 포함 된 텍스트를 레지스터의 내용으로 바꾸는 투 인원 명령을 제공합니다. 오래된 텍스트는 블랙홀 레지스터로 삭제됩니다. 즉 사라졌습니다. 많은 코너 케이스를 투명하게 처리하고 표준 .명령을 통해 빠르게 반복 할 수 있습니다 . 마음에 들지 않으면 페이지에 대안 링크가 있습니다.


2

붙여 넣기를 반복하려면 change 명령을 사용하십시오.

cw ^R0ESC (^ R = Control + R; 레지스터 0의 경우 0)

단어를 reg의 내용으로 바꿉니다. 0으로 반복하자.

cgn(VIM 7.4)가 검색 ​​패턴을 대체하기에 좋습니다 .

  • /또는로 처음 검색*
  • cgn ^R0ESC
  • .다음 경기에서 반복하거나 n건너 뛰기

1

아직 포함되어 있지 않으므로 일반적으로 문자열을 바꾸고 :%s/.../.../커서 아래의 단어 로이 작업을 수행 할 수 있습니다.

  1. 명령의 첫 부분 인 검색 대상을 입력합니다. :s/find/
  2. 그런 다음 클릭 <ctrl-r>하고 바꿀 단어를 커서로 선택 하십시오 .
  3. 그런 다음 <ctrl-w>(작은 "단어") 또는 <ctrl-a>(큰 "단어") 를 클릭 하여 커서 아래의 단어를 명령 줄에 붙여 넣습니다.
  4. 그런 다음 명령을 완료하십시오.

명령 행에서 커서 를 사용하는 방법에 대한 링크를 참조하십시오 .


1

나는 보통 이것을 사용하여 : ywyank foo, 다음으로 삭제 bar하고 dw, 마지막 단계로를 사용하여 yanked 텍스트를 보유하는 foo레지스터 에서 넣습니다 . 필요에 따라 마침표 ( )로 반복 합니다.0"0p.

또한 대신에, yw그리고 dw, 당신은 사용할 수 있습니다 yiwdiw(여분의 알 i- 뜻 내부 ). 그것으로 당신은 단어 의 시작뿐만 아니라 그 안의 어떤 위치에서 단어를 잡아 당기거나 삭제할 수 있습니다 .


0

선택 영역을 확장하기 위해이 플러그인을 사용합니다 : https://github.com/terryma/vim-expand-region

단어를 바꾸기위한 나의 조합은 : 단어의 vvp어느 곳에서나 될 것 입니다.

붙여 넣은 후 이름이없는 레지스터 내용을 저장하는 해킹이 있으므로 반복 할 수 있습니다.

vnoremap p p:let @"=@0 <CR>
vnoremap P P:let @"=@0 <CR>

(내 클립 보드는 자동 선택입니다)


0

아래의 키 매핑을 사용하여 현재 단어를 복사 된 단어로 바꿉니다.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>

yiw단어를 복사하십시오. 단어로 이동하십시오. ,rr단어를 바꾸십시오.
리더 키는에 매핑됩니다 ,.


,rwQWERTY는 아마도 더 쉽고 빠른 벨트 아웃입니다. DVORAK에서 나는을 선택했는데 ,rc, 전혀 의미가 없지만 모든 것보다 쉽고 빠릅니다. DVORAK에서 ,rw공포 쇼입니다;)
Paul Parker

0

먼저, 원하는 단어의 시작으로 이동하십시오. 당신이 단어의 중간에 있다면, 그냥 b시작으로 돌아가십시오. 그런 다음 후행 공백 없이 ( k 번째 부터 끝까지) ye단어 전체를 잡아 당기십시오 . 마지막으로, 아마도 몇 번이나 대체하여 바꾸려는 단어로 이동하여 isual selection mode 로 들어가서 단어 의 nd를 선택하고 마지막으로 내용을 정리 하십시오 .yewvepvep

(누군가가 ye아닌 작은 수정을 위해 허용 된 답변에 대해 단순히 언급하지 않은 이유를 알고 싶다면 yw이 스택에 대한 평판이 여전히 낮기 때문입니다.)


0
  1. yw세상을 구하기 위해 사용 하고, 바꾸고 싶은 세상으로 가십시오.
  2. 사용 v세계를 선택하기 위해, ve또는 vw상황에 따라.
  3. p선택한 블록을 대체하기 위해 복사 한 세계를 붙여 넣으려면 입력하십시오.

0

다른 더 나은 답변을 추가합니다. 조금 분명하지만 삭제하기 전에 붙여 넣을 수 있습니다. 그런 다음 'yw'로 바꾸려는 단어로 이동하십시오. 'pldw'(붙여 넣기, 한 문자 오른쪽 이동, 단어 삭제).

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