首页 > 解决方案 > 使用单引号时,Vim 替换在命令行模式下没有正确发生

问题描述

我有一个数据 init=6'b000000; 的文件 test.txt;我想用 init=6'b110111; 替换它 通过在 bash 文件中使用 vim 脚本。我收到错误

我正在使用以下命令:

vim -c '%s/init=6'b000000;/init=6'b110111;/g | write | quit' test.txt

这在 vim 中完美运行,而不是在 bash 中。

标签: bashshellvim

解决方案


这与 无关Vim,您不能在一对其他单引号中嵌入单引号。shell 在将命令行参数传递给调用的命令之前对其进行解析,它只是无法以您定义的方式处理内部单引号。

在传递给命令之前,需要保留里面的文字单引号。所以使用双引号并转义内引号

vim -c "%s/init=6\'b000000;/init=6\'b110111;/g | write | quit" file

或使用单引号,但在里面包含多级双引号

vim -c '%s/init=6'"\'"'b000000;/init=6'"\'"'b110111;/g | write | quit' file

推荐阅读