vi/vim에서 텍스트 줄을 덮어쓰는 방법은 무엇입니까?

vi/vim에서 텍스트 줄을 덮어쓰는 방법은 무엇입니까?

vi/vim에서 페이지 아래의 텍스트 줄을 덮어쓰고 싶습니다. 한 줄의 문자를 덮어쓰는 것과 유사합니다. 를 누른 R다음 붙여넣으면 문자가 덮어쓰여지지만 페이지 아래에서도 동일한 작업을 수행하고 싶습니다.

예:

다음 텍스트가 포함된 파일이 있습니다.

 var1: 7FBzezsLKyzYmVeM
 var2: kL8RIBJVNrlEUyYV
 var3: 1FkmXFSXtH4msKnL

이 줄을 다음으로 바꾸고 싶습니다.

 var1: 7PmuHKKRx9OYt9mR
 var2: nuRAS5dAKfUrvECJ
 var3: km11I7HuXOWuu43X

제가 일반적으로 하는 일은 기존 행을 삭제하고 그 자리에 새 행을 붙여넣는 것입니다. 또는 그 반대의 경우도 마찬가지입니다.

새 텍스트는 다른 곳에서 가져오든 복사하든 붙여넣기 버퍼에서 가져옵니다.

광범위하게 검색했지만 이 작업을 수행하는 방법에 대한 참조를 찾을 수 없습니다. 매크로를 사용해도 이 작업을 어떻게 수행할지 상상할 수 없습니다.

누구든지 이것을 할 수 있었습니까? 이것이 가능하지 않다면 나는 확실히 알고 있습니다.

답변1

이것을 시도해 보십시오:

  • 복사하려는 행을 복사/끌어오기
  • 변경하려는 버퍼로 전환
  • gRCtrl-r0Esc

번역하다:

  • gR시각적 대체 모드 시작( 참조 :h gR)
  • Ctrl-r0- 레지스터에서 붙여넣기 ( , 0참조 ):h i_CTRL-R:h quote0
  • Esc- 잎 교체 모드.

답변2

니가 무슨 말하는지 모르겠어.

일치하는 첫 번째 행으로 이동하여 사용

.,.+2d
r /tmp/var
  • .,.+2d행 3이 제거됩니다(필요에 따라 행 2 조정).
  • r /tmp/var템플릿 파일을 읽습니다(삽입).

답변3

gR이전 길이와 새 길이가 동일하면 내장(@SatoKatsura가 제안한 대로)이 좋습니다. 그러나 일반적인 경우에는 이것이 작동하지 않으며 다른 접근 방식을 취해야 합니다. 이 기능이 너무 자주 필요해서 이를 단순화하고 최대 속도를 허용하는 플러그인을 작성했습니다.레지스터로 교체.

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

관련 정보