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