【发布时间】:2021-01-26 11:33:22
【问题描述】:
在 Windows 10 中,我在 Git bash 1.9.5 中使用了以下命令,
$ vim -c "%s/^/\=line(".").'. '/g" -c "%s/\//\\/g" -c "%y+" -c "wq" ~/Desktop/sample.txt
为了,
-
-c "%s/^/\=line(".").'. '/g":在每一行之前添加一个数字序列。 -
-c "%s/\//\\/g":用反斜杠替换所有斜杠。 -
-c "%y+" -c "wq":将所有文本复制到剪贴板,保存并退出 Vim。
除了2 之外,一切都很好,看来-c "%s/\//\\/g" 参数不能被Vim 正确处理。没有替换任何斜线,并且在每行的每个第一个 / 之后插入一个 g。例如,
之前的示例.txt
A/P/A/T/H
B/P/A/T/H
Sample.txt 之后
A/gP/A/T/H
B/gP/A/T/H
但是,如果我在 vim 中执行 :%s/\//\\/g,它会按预期工作。
另外,这些我都试过了,
-
-c "%s/\//@/g"可以按预期将所有/替换为@。 -
-c "%s,/,\\,g"会将每行中的第一个/替换为,g。
所以,我想知道这是 -c 参数的限制或已知问题,还是我在某个地方犯了错误?
编辑:我偶然发现-c "%s/\//\\\/g" 按预期工作。
那么谁能解释一下为什么需要另一个\ 来逃避\?
【问题讨论】:
-
请注意,这与 Git 没有任何关系,与 vim 也没有太大关系。作为romainl explains,这里的问题在于你的shell。 (“Git bash”是 bash 到 Windows 的一个端口,而不是 Git 本身的一部分。)