vim 검색 및 바꾸기에 vimscript 변수와 문자열을 삽입하는 방법

vim 검색 및 바꾸기에 vimscript 변수와 문자열을 삽입하는 방법

저는 오늘 Vimscript의 존재를 방금 발견했습니다. 이 질문이 보기보다 기본적이라면 양해해 주시기 바랍니다. 하지만 저는 하루 종일 이 질문에 대한 답을 찾으려고 노력해 왔습니다.

저는 vim에서 많은 반복 작업을 수행해야 하는 파일을 작업하고 있습니다. 예를 들어 내 파일은 다음과 같습니다.

    firstname
    secondname
    thirdname
    fourthname
    fifthname
    sixthname
    ...

목록은 계속해서 이어집니다. 제가 하고 싶은 것은 각 줄의 끝에 고정된 문자열을 추가하여 각 줄이 증가하는 숫자로 끝나도록 하는 것입니다. 즉:

    firstname = _first1
    secondname = _first2
    thirdname = _first3
    fourthname = _first4
    fifthname = _first5
    sixthname = _first6
    ...

이 문제를 해결하기 위해 짧은 bash 스크립트를 작성할 수 있다는 것을 알고 있지만, 내가 습득하고 싶은 기술인 vimscript를 사용하여 vim에서 모든 작업을 수행할 수 있다는 전망에 매료되었습니다. 지금까지 vim 명령 모드에서 실행되는 함수를 설계했습니다.

    :let i=1 | g/name/s//\=i/ | let i=i+1

결과가 대부분 내가 원하는 것이기 때문에 이는 유망해 보입니다.

    first1
    second2
    third3
    fourth4
    fifth5
    sixth6
    ...

하지만 아무리 수정하려고 해도 문자열(=_first) 뒤에 숫자가 늘어나도록 인쇄할 수 없습니다. 이와 같은 ...

    :let i=1 | g/name/s//name = _first\=i/ | let i=i+1

이것을 생산합니다.

    firstname = _first=i
    secondname = _first=i
    thirdname = _first=i
    fourthname = _first=i
    fifthname = _first=i
    sixthname = _first=i
    ...

이...

    :let i=1 | execute 'g/name/s//name = _first' . i . '/' | let i=i+1

이것을 생산합니다.

    firstname = _first1
    secondname = _first1
    thirdname = _first1
    fourthname = _first1
    fifthname = _first1
    sixthname = _first1
    ...

나는 다른 조합을 시도했지만 지금은 거의 어둠 속에 있습니다. 내가 시도하는 모든 것은 문자열 없이 증분 변수를 얻거나 정적 변수가 있는 문자열을 얻는 것 같습니다. vimscript로 어떻게 할 수 있나요?

편집하다:

Ingo Karkat에게 정답을 준 이유는 내 문제에 대한 해결책을 직접적으로 안내해 주었기 때문입니다. 후손을 위해 이것은 내가 사용한 코드입니다.

    :let i=1 | 1156,1271g/$/s//\=' = _first' . i/ | let i=i+1

생산:

    firstname = _first1
    secondname = _first2
    thirdname = _first3
    fourthname = _first4
    fifthname = _first5
    sixthname = _first6
    ...

내 코드(프로젝트 관련)에서 유일한 약간의 차이점은 1156~1271행에서만 실행되고 텍스트를 바꾸지 않고 줄 끝에 추가된다는 것입니다.

답변1

일단 사용하면대체 교체 특별, imports 의 경우 \=모든 것이 Vim 표현식이어야 합니다. 텍스트를 이전/추가 텍스트로 바꿀 수 없습니다. 따라서 정적 텍스트는 문자열로 인코딩되고 다음과 연결되어야 합니다 ..

:let i=1 | g/name/s//\='_first' . i/ | let i=i+1

관련 정보