Vimscript:正则表达式适用于:s但不适用于替换()

use*_*675 3 regex variables vim

如果我将ls的输出粘贴到缓冲区中,则命令

:%s/.*\(\".*\"\).*/\1/
Run Code Online (Sandbox Code Playgroud)

将输出减少到文件路径.想要在变量中实现这个结果,我做到了

:redir => x|silent :ls|redir END
:let y = substitute(x, ".*\(\".*\"\).*", "\1", "g")
Run Code Online (Sandbox Code Playgroud)

绝对没有任何成就,y与x完全相同.我已尝试过对该替换命令的无变化,只得到相同的结果或一堆错误消息.我该如何指定它?

rid*_*rid 5

你需要在引号中转义反斜杠.使用\\(\\\"substitute().

  • 使用`substitute()`更少与使用双引号字符串有关.使用单引号有助于避免大量的转义.将`:help expr-string`与`:help literal-string`进行比较. (6认同)