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全局替换。

正如评论中提到的,$不需要转义(它只在模式末尾有特殊含义),但也可以转义(并避免一些思考)。

相关内容