我正在尝试使用 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
全局替换。
正如评论中提到的,$
不需要转义(它只在模式末尾有特殊含义),但也可以转义(并避免一些思考)。