[vim] Vim에서 레지스터에 텍스트를 넣지 않고 삭제할 수 있습니까?

Vim을 사용하여 종종 코드 블록을 방금 막힌 블록으로 교체하려고합니다.

그러나 교체 할 코드 블록을 삭제하면 해당 블록 자체가 레지스터로 이동하여 방금 막힌 블록을 지 웁니다. 그래서 나는 yanking, 삽입, 원하지 않는 것을 삭제하는 습관을 겪었지만 큰 코드 블록을 사용하면 삽입 된 블록과 블록을 별도로 삭제하려고하면 지저분 해집니다.

그렇다면 Vim에서 텍스트를 대체하는 가장 매끄럽고 빠른 방법은 무엇입니까?

  • 레지스터에 텍스트를 넣지 않고 텍스트를 삭제하는 방법이 있습니까?
  • 예를 들어 “다음 단어 바꾸기”또는 “다음 단락으로 바꾸기”라고 말하는 방법이 있습니까?
  • 또는 다중 등록 기능을 사용하는 가장 좋은 방법입니까?


답변

레지스터에 저장하지 않고 무언가를 삭제하려면 “블랙홀 레지스터”를 사용할 수 있습니다.

"_d

물론 관심있는 것을 보유하지 않은 다른 레지스터를 사용할 수도 있습니다.


답변

네. “오래된”텍스트를 먼저 삭제하는 것보다 약간 복잡합니다.

나는 시작합니다 ..

line1
line2
line3
line4

old1
old2
old3
old4

I shift+ vline1, line 2, 3 및 4를 선택하고 d명령으로 삭제하십시오.

그런 다음 이전 1-4 줄을 같은 방식으로 삭제합니다.

그런 다음

"2p

마지막 두 번째 줄을 붙여 넣습니다 (라인 1-4). "3p세 번째부터 끝까지 수행합니다.

그래서 나는 결국

line1
line2
line3
line4

참조 :
번호가 매겨진 레지스터의 Vim 문서


답변

VIM 문서 : 번호가 지정된 레지스터 0에는 명령이 [ “x]로 다른 레지스터를 지정하지 않은 한 가장 최근의 yank 명령의 텍스트가 포함됩니다.

예를 들어 “foo”를 잡아 당기고 “bar”를 삭제하십시오. 레지스트리 0에는 여전히 “foo”가 있습니다! 따라서 “foo”는 다음을 사용하여 붙여 넣을 수 있습니다."0p


답변

현재 선택을 버퍼로 바꿀 수있는 쉬운 매핑을 사용하는 것이 편리합니다.

예를 들어 이것을 .vimrc에 넣을 때

vmap r "_dP       // it's a capital 'p' on the end

그런 다음 무언가를 레지스터 (예 : ‘y’)에 복사 한 후 바꿀 텍스트를 선택하고 키보드에서 ‘r’을 누르기 만하면됩니다. 선택은 현재 레지스터로 대체됩니다.

설명:

vmap - mapping for visual mode
"_d - delete current selection into "black hole register"
P - paste


답변

vimrc에 다음을 넣었습니다.

noremap  y "*y
noremap  Y "*Y
noremap  p "*p
noremap  P "*P
vnoremap y "*y
vnoremap Y "*Y
vnoremap p "*p
vnoremap P "*P

이제 클립 보드 레지스터를 잡아 당기고 기본 레지스터에서 발생하는 일을 신경 쓸 필요가 없습니다. 또 다른 이점은 최소한의 번거 로움으로 다른 앱에서 붙여 넣을 수 있다는 것입니다. 몇 가지 기능을 잃어 가고 있지만 어쨌든 둘 이상의 레지스터 / 클립 보드를 추적 할 수는 없습니다.


답변

당신이 준 구체적인 예를 들어, 질문을 이해하면 다음과 같이 작동 할 수 있습니다.

*Highlight what you want to put somewhere else
*delete (d)
*Highlight the code that you want it to replace
*paste (p)


답변

모든 yank 및 delete 작업은 기본적으로 명명되지 않은 레지스터에 씁니다. 그러나 가장 최근의 yank 및 가장 최근의 삭제는 항상 번호가 매겨진 레지스터에 (별도로) 저장됩니다. 레지스터 0에는 가장 최근의 얀크가 있습니다. 레지스터 1-9는 9 개의 가장 최근의 삭제를 보유합니다 ( 1가장 최근 임).

다시 말해, 삭제는 명명되지 않은 레지스터에서 가장 최근의 yank를 덮어 쓰지만 여전히 0레지스터에 있습니다. "_dd다른 답변에서 언급 된 블랙홀 레지스터 트릭 ( )은 명명되지 않은 레지스터를 덮어 쓰지 못하기 때문에 작동하지만 필요하지는 않습니다.

큰 따옴표를 사용하여 레지스터를 참조하므로 가장 최근에 작성된 텍스트를 붙여 넣는 방법은 다음과 같습니다.

"0p

이것은 훌륭한 참고 자료입니다.