/
替换了!
::s!abc!ABC!g
我试图找到一些有关此用法的文档,但找不到任何相关的文档。因此,我尝试自己进行实验,但我再也无法弄清两个标志之间的真正区别。我发现的是:
不可能在命令中混合使用
!
和/
。例如,:s!abc/ABC
发生故障。使用
!
以避免在模式中转义/
可能会很有用。例如,如果要将</
替换为%
,可以使用:%s!</!%!g
而不是:%s/<\//%/g
。 似乎在某些情况下某些正则表达式不能与
/
一起使用,而不能与!
一起正常使用,但是由于我不是真正的正则表达式专家,因此我不确定。所以我的问题很简单:在替代命令中使用
!
有什么好处,何时决定代替/
使用它?#1 楼
从:help :global
开始:代替
{pattern}
周围的'/',您可以使用任何其他单字节字符,但不能使用字母字符'\',' “'或'|'。
如果要在搜索模式中包含'/'或
替换字符串,则很有用。
是根据您的实验设计的,目的是预防所谓的“倾斜牙签综合征”。请考虑以下问题:
:%s/\/home\/martin\/test/\/home\/jake\/x/
与之相对:
:%s!/home/martin/test!/home/jake/x!
第二种形式显然更具可读性。
这是您可以更改定界符的唯一原因;使我们对人类更易读。
顺便说一下,其他一些程序甚至更加灵活,例如,在GNU
sed
中,您可以根据需要使用x
作为分隔符。sed sxaxbxg file
与sed s/a/b/g file
相同。评论
至于可读性,我更喜欢(并建议):%s @ / home / martin / test @ / home / jake / x @,因为“胖” @使得查看语句的各个部分从何处开始更加容易/结束。
–DevSolar
15年2月2日在15:32
@DevSolar我发现:%s#/ home / martin / test#/ home / jake / x#效果更好,但这只是个人观点。
–阿米特金
16年8月29日在14:44
评论
该问题也已发布到Stack Overflow确实,我在几分钟前错误地标记了一个双重帖子,以知道该怎么做。