현재 붙여넣기 버퍼를 사용하여 Vim에서 "단어 변경"하는 방법은 무엇입니까?

현재 붙여넣기 버퍼를 사용하여 Vim에서 "단어 변경"하는 방법은 무엇입니까?

붙여넣기 버퍼에 일부 텍스트가 있습니다. 예를 들어 yw(단어 꺼내기)를 수행했는데 이제 버퍼에 "foo"가 있습니다.

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

텍스트를 수동으로 바꾸려면 이 작업을 수행 cw한 다음 새 단어를 입력하면 됩니다.

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

지금 최선의 선택은 바꾸고 싶은 단어의 시작 부분으로 가서 수행 dw(단어 제거)하고, 다른 곳으로 이동하여 수행 yw(단어 가져오기)하는 것입니다. 그런 다음 교체 영역으로 돌아가서 p(붙여넣기) 작업을 수행합니다. 이는 특히 동일한 화면에 있지 않을 때 다소 어색합니다.

답변1

옵션 1

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

바꾸고 싶은 단어를 꺼내세요 yw.

가져온 단어는 0발행하여 볼 수 있는 레지스터 에 있습니다 :registers.

바꾸고 싶은 단어로 가서 그것을 하세요 cw. Ctrl+ 작업을 수행 r한 다음 레지스터를 0붙여넣습니다 .0

매핑은 다음과 같습니다( Ctrl+를 j키 조합으로 가정).

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

옵션 2(더 쉬움)

단어를 꺼낸 후 바꾸고 싶은 단어에 커서를 놓고 실행합니다 viwp. 시각적으로 내부 단어를 선택하여 붙여넣는 것입니다.

댓글에 있는 @tlo에게 감사드립니다. 여러분도 이 작업을 수행할 수 있습니다 vep. 한 글자 더 짧습니다. 단점은 단어의 시작 부분에 커서를 놓고 (저처럼) 버퍼를 변경해야 한다는 것입니다.

코멘트(Michael의):

이것은 좋다. 추가 참고 사항: 두 번째 방법은 실제로 더 쉽지만 교체할 때마다 버퍼가 교체되는 필드(이전 텍스트)로 변경되므로 한 번의 교체로만 작동합니다. 첫 번째 방법은 사용하기가 조금 더 어렵지만 버퍼 0이 "그대로" 유지된다는 장점이 있으므로 이 방법을 사용하여 동일한 텍스트를 여러 번 바꿀 수 있습니다.

답변2

빔의 길방법을 배우는 것입니다의도적으로양크, 삭제 및 기타 레지스터를 사용하십시오. 이것을 알고 나면 이 작업을 수행하기 위한 자신만의 키 시퀀스를 쉽게 찾을 수 있습니다.

레지스터는 "0양크 레지스터입니다. 끌어오는 모든 항목은 여기에 이동되지만 삭제나 변경은 레지스터에 닿지 않습니다 "0.

그래서 당신의 예에서는 단어 하나를 뽑았습니다. 방금 가져온 단어로 단어를 바꾸려면 가져온 레지스터를 건드리지 않는 삭제 작업을 활용할 수 있습니다. 대상 단어로 이동하고, 이를 사용하여 삭제하거나 dw복사 레지스터에서 붙여넣는 것이 더 좋습니다(반복 가능)."0pcw^R0

복사 레지스터의 반대편에는 작은 삭제 레지스터가 있습니다 "-. 작은 삭제나 변경 사항은 여기에 저장되지만 잡아당겨도 절대 건드리지 않습니다 "-. 삭제량이 전체 행보다 적으면 소규모 삭제로 간주됩니다.

등록 "1- "9대규모 삭제 기록 등록입니다. 가장 최근의 대규모 삭제 또는 변경 삭제를 포함하고 "1, "9가장 오래된 대규모 삭제 또는 변경 삭제를 포함합니다. 작지 않은 삭제(예: 전체 행 또는 여러 행 삭제)만 "1- 로 푸시됩니다 "9.

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

레지스터 "_는 블랙홀 레지스터이므로 항상 비어 있습니다. 이를 제거하면 기본 ""레지스터나 블랙홀 레지스터 자체를 비롯해 어떤 레지스터의 어떤 것도 변경되지 않습니다. 삭제된 텍스트는 실행 취소 기록을 제외하고 완전히 사라졌습니다. 블랙홀 레지스터에서 끌어오거나 붙여넣는 것은 기본적으로 아무 일도 하지 않습니다.

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

여러분은 아마도 레지스터일 뿐인 일반적인 명명된 레지스터에 이미 익숙할 것입니다. "a그리고 "z이를 스크래치 공간으로 마음대로 사용할 수 있습니다. "A명명된 레지스터를 대문자로 참조하는 경우 "Z해당 내용을 바꾸는 것이 아니라 추가하는 것입니다.

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

명령을 사용하여 이러한 모든 레지스터와 해당 내용의 목록을 얻을 수 있습니다 :register. 이 명령은 레지스터의 현재 내용을 표시하므로 결과가 어디인지 실험하고 이해하는 데 유용합니다.

답변3

yw단어를 꺼낸 다음 바꾸려는 단어로 커서를 이동하고 이를 삭제하는 데 사용하여 텍스트를 빈 레지스터로 보냅니다(그래서 끌어오거나 잘라낸 텍스트가 있는 "_dw레지스터의 내용을 덮어쓰지 않습니다). "기본적으로 등록)을 입력하고 p.

다음 매핑을 사용하면 작업을 좀 더 쉽게 만들 수 있습니다.

nnoremap <leader>d "_d

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

답변4

이 기능이 너무 자주 필요해서 이를 단순화하고 최대 속도를 허용하는 플러그인을 작성했습니다.레지스터로 교체.

플러그인은 gr{모션}/텍스트 개체, 전체 줄 또는 현재 선택 항목에 포함된 텍스트를 레지스터의 내용으로 대체하는 2-in-1 명령을 제공합니다. 이전 텍스트는 블랙홀 레지스터에서 삭제됩니다. 즉, 사라진다. 많은 엣지 케이스를 투명하게 처리하고 .표준 명령을 통해 빠른 반복을 허용합니다. 마음에 들지 않으면 해당 페이지에 대안에 대한 링크가 있습니다.

관련 정보