내부 텍스트를 기울어 진 텍스트로 바꾸는 방법


17

자주 사용하는 편집 패턴은 다음과 같습니다. 따옴표 나 괄호 안에있는 텍스트 조각을 잡아 당기고 다른 따옴표 / 괄호 안에있는 텍스트 조각을 바꾸고 싶습니다.

예를 들어 클래스 이름을 복사하여 foo bar다른 곳에 붙여 넣으 려면 다음을 수행하십시오 .

<span class="foo bar">

<div class="this-should-be-replaced-with-foo-and-bar">

내가 아는 것은 : 스팬의 클래스 내부로 이동 yi"하면 따옴표 안에 텍스트를 넣습니다.

이제 내 레지스터 에이가 있으므로 div의 클래스 내용을 바꿀 수 있어야합니다. 그러나 나는 이것을하는 편리한 방법을 찾을 수 없습니다.

이것을 사용 ciw하면 내용을 변경하여 레지스터를 덮어 쓰게되므로 텍스트가 느슨해집니다.

내가 생각해 낼 수있는 가장 좋은 방법은 div 클래스의 첫 번째 따옴표로 이동하여을 p누른 다음으로 다음 따옴표로 삭제하는 것입니다 dt".

일반적으로 나는 내 입장을 망치고 두 줄을 병합하는 따옴표 안에 어딘가에 붙여 넣습니다.

"내부 텍스트를 원하는 내용으로 바꾸십시오"를 쉽게 조합 할 수있는 방법이 있기를 바랍니다.

답변:


19

vi"p안에있을 때 사용할 수 있습니다 "". 이것은 yank register의 텍스트를 대체 할 수 있으므로 원래 yanked 텍스트를 두 번 이상 사용할 때 중요합니다.

편집 : 두 번 이상 재사용 할 수있는 Octaviour 의견의 추가 정보 :

: 나는 두 명령을하게 명명 된 레지스터에 꺼낼 것이다 그렇게하기 위해서는 "ayi"및 및 vi""ap등록 사용하는 경우 a.


2
이 솔루션에 대해 자세히 설명하겠습니다. 먼저 복사하려는 텍스트를 잡아 당깁니다. 그런 다음 붙여 넣을 위치로 이동하고 vi "를 사용하여 시각적으로 선택합니다. 붙여 넣기 명령은 이제 이름이없는 레지스터의 내용을 커서에 놓고 선택한 텍스트를 삭제합니다. 따라서 vi"p는 원하는 것을 정확하게 수행하지만 명명되지 않은 레지스터의 내용을 대체하므로 동일한 텍스트를 두 번 붙여 넣을 수 없습니다. 그렇게하기 위해, 명명 된 레지스터로 들어가서 레지스터 a를 사용하는 경우 "ayi"와 vi ""ap라는 두 명령을 만든다.
Octaviour

정교한 감사합니다. 그것은 vim 모션으로 물건을 철자하는 데 도움이되며, 나중에 기억하기가 더 쉽습니다. 내가 기대했던 것만 큼 쉽지는 않지만, 현명한 방법으로 의미가 있습니다. dot 명령을 사용하여 반복하고 빠르게 두 번째로 바꾸는 것은 작동하지 않는 것 같습니다. 나는 그것이 지름길 이길 바랐다. :)
jurgenb

11

번호가 매겨진 레지스터를 사용할 수 있습니다. 를 가진 첫번째 yank "foo-bar"로 레지스터 yi"를 채울 것이다 . 그런 다음 레지스터 0의 내용으로 바꾸십시오."0:h "0ci"<c-r>0

:h i_CTRL-R마지막 부분에 대한 설명을 참조하십시오 .


2
명명되지 않은 레지스터 ( yi") 에서 간단히 0변경하고 텍스트를 삭제 한 후 저장된 레지스터 에서 붙여 넣기 ( ) 하지 않는 이유는 무엇 ci"<c-r>0입니까? vimgolf의 용어로 2 번의 키 입력을 받고 레지스터를 엉망으로 만들지 않습니다.
statox

내가 'a'를 누르 자마자 편집 모드로 끝납니다. 이것은 레지스터로 복사되지 않습니다
jurgenb

@ n3wjack 아마의 당신을 누르면하지 않았기 때문에 그건 CTRL+r전에 a,의 그 무엇 <c-r>을 의미합니다.
statox

1
@ KarlYngveLervåg 실제로 ciw삭제 된 텍스트를 명명되지 않은 레지스터에 넣지 만 레지스터가 이동 되었으므로 <c-r>0대신 대신 사용해야 합니다 <c-r>". 참조하십시오 :h quote_number.
statox

1
좀 더 구체적으로 말하면, 여기의 요점은 명명되지 않은 레지스터가 아니라 번호가 지정된 레지스터에 관한 것입니다. "0레지스터 만 가득 차면 명령에 의해 채워지고 예에 의해 방해되지 않습니다 c.
Karl Yngve Lervåg

9

다른 해결책이 있습니다. Vimgolf의 측면에서 최고는 아니지만 블랙홀 레지스터를 사용합니다.

일단 foo bar문자열에 있으면 일반적으로을 사용하여 yan 수 있습니다 yi".

그런 다음 대괄호 안에서 변경하십시오. "_di"P

어느 것이 :

"_       We will use the black hole register
di"      Delete the inner brackets and put the deleted text in the black hole register
P        Put the previously yanked text

블랙홀 레지스터의 장점은 다른 레지스터를 엉망으로 만들지 않는다는 것입니다. 자세한 내용 :h quote_은 참조하십시오.

(이 답변은 블랙 아웃 레지스터에 대해서만 이야기하는 것입니다. 개인적으로 @grodzik이 제안한 시각적 선택을 사용합니다.)


나는 당신이 그것의 대문자가 필요하다고 생각합니다 P. 당신이 때 di"커서가 마지막 따옴표에 남아있을 것입니다 및 p후 붙여 넣 곳으로 P현재 위치 전에 붙여 넣습니다.
jecxjo

@jecxjo 맞습니다, 나는 대답을 편집했습니다, 감사합니다!
statox

8

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

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


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