一行是这样的:
$$$$
光标移到在这一行行首,输入:s/&&&&/&&/g
然后按回车,发现剩下来$$$
而不是$$
,这是为什么呢
1
dier 2022-05-17 10:25:39 +08:00
我猜可能是因为`$`在 shell 环境是变量的开头,把"$"开头的内容识别成变量了吧。有些符号在 shell 环境中有特殊含义,所以不转义就会有问题。
我试着在每个"$"前加个"\"转义符就正常了。 另外,我还试了# % & #和%不转义都能正常替换,&却是越替换越多🤣 |
2
nightwitch 2022-05-17 10:35:50 +08:00
在正则表达式里`$`这个符号有特殊含义。
要当普通字符来处理前面需要加\转义 |
3
movq OP 不好意思标题和内容有误,我是把 &&&& 替换成 &&,标题和内容的$都应该改成&
|
4
movq OP @dier 对于&&&&, 我用:s/\&\&\&\&/\&\&/g 是越替换越多, :s/\&\&\&\&/&&/g 是没发生任何变化
|
5
movq OP $$$$用:s/$$$$/$$/g 替换是成了$$$
用:s/\$\$\$\$/$$/g 替换是成了$$ |
6
dier 2022-05-17 11:06:29 +08:00
@movq #4 刚才试了一下"&"这个符号的替换,在 vim 中暂时没找到合适的替换方法,不知道是不是我的理解还不够。
不过我试过在外面用 sed 命令尝试替换,发现是可行的`sed -i 's/\&\&\&\&/\&\&/' filename` |
7
Kobayashi 2022-05-17 11:31:36 +08:00
:set nomagic
:help magic |
8
AoEiuV020CN 2022-05-17 11:37:23 +08:00 2
%s/&&&&/\&\&/g
%s/\$\$\$\$/$$/g |
9
013231 2022-05-17 11:44:37 +08:00 1
`&`符号在替换字符串中有特殊意义,代表"the whole matched pattern"。
那么对于字符串"&&&&",用命令`:s/&&&&/&&/g`替换,"the whole matched pattern"是"&&&&",替换为两个"the whole matched pattern",就变成了 8 个&。 正确的正确的写法是`:s/&&&&/\&\&/g`。 |
10
DrakeXiang 2022-05-17 12:10:30 +08:00
vim 的正则有点不一样,我经常要用\v 来实现,但是有时候又不行
|
11
nothingistrue 2022-05-17 13:50:15 +08:00
|
12
nothingistrue 2022-05-17 14:03:20 +08:00 1
替换有两个参数,第一个是用于查找的正则表达式,第二个是替换内容。替换内容也不是普通文本,也有特殊字符,但又跟正则表达式的特殊字符不是一套规则。然后不同语言的实现规则还不一定一样,比如说用的用$0-9 ,有的用&0-9
|
13
psyngw 2022-05-17 15:21:21 +08:00 1
:s /\V&&&&/\&\&/g
模式匹配有好几个开关,这种关键字可以多用用 `\V` |