我有这样的文字
template
template
template_results
template
我需要将其替换为
template_form
template_form
template_results
template_form
如何替换Vi中未跟template
个字符的_
的每个匹配项?
我试过这样的
:%s/template[^_]/template_form - Pattern not found
:%s/template\[^_]/template_form - Pattern not found
:%s/template[_]/template_form - This works, but the pattern is opposite of what I need
谢谢:)
答案 0 :(得分:2)
使用否定前瞻:
:%s/template\(_\)\@!/template_form/gc
这意味着匹配任何“模板”未跟随(\@!
)任何“_”
请参阅::help /zero-width
答案 1 :(得分:2)
您正在尝试指定模板,然后没有。
所以诀窍是使用行尾说明符$
:%s/template$/template_form/g
第一个不起作用,因为此[^_]
匹配除下划线以外的任何单个字符,但不匹配任何字符(或显然是行尾)。
答案 2 :(得分:0)
这在VIM中很容易,但坚持我认为的香草VI,你可以做到
:%s/template$/template_form/
这假设每行后面都有一行结束。如果没有,请尝试:
:s/template\(\s\|$\)/template_form/
我不知道“魔法”是否适合您的VI风格,但这与“模板”匹配后跟空格或行尾。