vim에서 문자열의 각 항목을 증가하는 카운터로 바꾸는 방법은 무엇입니까?

vim에서 문자열의 각 항목을 증가하는 카운터로 바꾸는 방법은 무엇입니까?

파일에 이 단어의 인스턴스가 203개 있고 ubuntu각 인스턴스를 로 바꾸려고 합니다 UBUNTU_X. 여기서 "X"는 증가 카운터입니다. 즉, 원본 파일은 다음과 같습니다.

ubuntu xxxxxxxx ubuntu xxxxxxxx ubuntu xxxubuntuxxx xxxubuntu ubuntuxxxxxx ...

나는 그것을 다음으로 바꾸고 싶습니다 :

UBUNTU_1 xxxxxxxx UBUNTU_2 xxxxxxxx UBUNTU_3 xxxUBUNTU_4xxx xxxUBUNTU_5 UBUNTU_6xxxxx ... 

마지막 발생은 다음과 같아야 합니다.UBUNTU_203

답변1

ggOUbuntu_0Esc0"ndeddqq/\<Ubuntu\>^Mde"nP^Ab"nyeq999@q

일반 모드에서 입력하면 원하는 효과를 얻을 수 있습니다.

설명하다:

  • gg- 파일의 첫 번째 줄로 이동
  • O- 현재 행 위에 새 행을 만들고 삽입 모드로 들어갑니다.
  • Ubuntu_0- 텍스트를 입력하세요
  • Esc- 삽입 모드를 종료하고 계속 사용Ctrl[
  • 0- 현재 줄의 처음으로 이동
  • "nde- n 등록으로 가서 단어 끝까지 삭제
  • dd- 현재 줄 삭제
  • qq- 레지스터 q에 매크로 기록 시작
  • /\<Ubuntu\>^M- 우분투를 검색하세요. \< 및 \>는 단어 경계를 나타내며 Ctrl-M은 Enter를 누르는 것과 같습니다.
  • de- 단어 끝까지 삭제
  • "nP- 레지스터 n의 내용을 커서 위치 앞에 놓습니다.
  • ^A- Ctrl-A, 커서 아래의 숫자에 1 추가
  • b- 현재 단어의 시작 부분으로 이동
  • "nye- n을 등록하여 현재 단어의 끝 부분까지 텍스트를 복사합니다.
  • q- 매크로 기록 중지
  • 999@q\<Ubuntu\>- 레지스터 q에 기록된 매크로를 999회 실행합니다. (또는 패턴이 더 이상 발견되지 않으면 중지합니다.)

특정 요구 사항에 따라 약간 수정될 수 있습니다. 예를 들어, "Ubuntu"를 전체 단어로만 일치시키려고 한다고 가정합니다. 나는 또한 당신이 주어진 대소문자만 일치시키기를 원하거나 대소문자 무시를 활성화한 경우 "ubuntu"의 다양한 경우가 모두 "Ubuntu"로 변환되는 것을 신경 쓰지 않는다고 가정합니다.

답변2

일부 Linux 배포판에서는 Perl 지원으로 vim을 컴파일했습니다. 이 경우에는 a :perldo command와 a가 있습니다.:perl command

:perldo  s/ubuntu/"UBUNTU" . ++$a/ge 

관련 정보