Vim 위치 매개변수 검색 및 바꾸기

Vim 위치 매개변수 검색 및 바꾸기

Vim의 대체 명령을 사용하여 위치 인수를 bash 스크립트의 변수로 바꾸려고 합니다 :s.

예: Bash 스크립트에서 다음 텍스트를 바꾸고 싶습니다.

python3 mymodule.py --dataversion $1

그리고:

python3 mymodule.py --dataversion "${DATAVERSION}"

:s/\$1/"${DATAVERSION}"유발하려고 노력했습니다 E486: Pattern not found: $1.

교체 대신 패턴을 검색하면 /\$1인스턴스가 감지됩니다. Vim의 검색 및 대체 명령에서 이 패턴이 다른 이유는 무엇입니까?

답변1

검색할 때 Vim은 자동으로 전체 버퍼를 고려합니다(비활성화하지 않은 경우).'wrapscan'옵션 - 그러면 끝까지만 검색합니다.) 귀하의 :substitute명령은 다음 사항만을 고려합니다.현재 행, 당신이 놓쳤기 때문에:help :range, 그리고 이 명령(대부분의 다른 명령과 마찬가지로)은 기본적으로 현재 줄만 지정합니다. 교체를 위해 전체 버퍼를 덮어쓰려면 을 앞에 추가하면 됩니다. %이는 다음의 약어입니다 1,$.

:%s/\$1/"${DATAVERSION}"

또한 한 줄에 여러 항목이 있는 경우 $1첫 번째 항목만 대체됩니다. 전역 교체를 추가합니다 /g.

주석에서 언급했듯이 $이스케이프는 필수는 아니지만(패턴 끝에 특별한 의미가 있음) 이스케이프도 가능합니다(일부 생각을 피할 수 있음).

관련 정보