为什么vim不接受\?在替代()?

lan*_*nza 2 vim

:echo substitute("15", "15\?", "replaced", "")
15
Run Code Online (Sandbox Code Playgroud)

:help substitute()报告我们cpoptions是空的,我们正在使用magic以及其他一些小的差异(似乎并不指向\?不起作用)。

包含以下内容的文件:

15
Run Code Online (Sandbox Code Playgroud)

其次是

:%s/\m15\?/replaced/
Run Code Online (Sandbox Code Playgroud)

的确将替换15replaced

任何人都可以向我指出这里的分歧以及手册在哪里解释这一点?

j1-*_*lee 6

尝试

:echo substitute("15", "15\\?", "replaced", "")
Run Code Online (Sandbox Code Playgroud)

在双引号中,\解释为。例如,"\n"是换行符,"\\"是反斜杠字符\等。由于表达式"\?"没有特殊解释,它只是成为一个问号?,因此您实际上为15?函数提供了正则表达式。所以你需要转义\才能使字符串被\?Vim识别。

或者,您可以使用单引号(“literal-string”),它不会解释但\按原样接受:

:echo substitute("15", '15\?', "replaced", "")
Run Code Online (Sandbox Code Playgroud)

(要查看差异,请尝试echo "\?"echo '\?'。)

一些相关的帮助条目是:help expr-":help expr-'