在 Vim 中用引号括起来的搜索字符串

Search string enclosed in quotes in Vim

提问人:jjk 提问时间:4/5/2017 更新时间:4/6/2017 访问量:2188

问:

在 vim 中,我需要用引号搜索所有字符串,例如“foo”

人们看到这个正则表达式中的问题了吗?E486: 未找到模式 \'([^']*)'

:\/'([^']*)'

正则表达式测试器

正则表达式 VIM

评论

0赞 jjk 4/5/2017
你好(对不起我的礼貌)
0赞 anubhava 4/5/2017
只需使用/'([^']*)'
0赞 Sato Katsura 4/5/2017
仅供参考:有 >50 种正则表达式方言,大多数彼此不兼容。Vim 使用其中一种方言,而正则表达式测试站点使用其他方言,与 Vim 不兼容。我还没有看到这样一个了解 Vim 正则表达式的网站。

答:

3赞 sidyll 4/5/2017 #1

第一个问题是你对 find 的使用有点令人困惑。如果需要帮助, 要查找,请使用 .冒号不是必需的(这表明 命令模式)。如果您将查找用作范围(基本相同 thing,只是一个带有范围的空命令)您可以使用冒号, 但无论哪种方式,都不需要逃避第一个斜杠。//

另一个主要问题是默认情况下需要转义括号 如果你指的是一个捕获组。所有这些都取决于您的选择,强烈建议您阅读该主题的帮助(您可以这样做)。使用“vanilla”Vim 设置, 您需要的正则表达式看起来是实时的:'magic'/magic:h magic

/'\([^']*\)'

使用非常神奇的使能(通过使用原子),这可以简化 到您的原始设计:\v

/\v'([^']*)'
2赞 builder-7000 4/5/2017 #2

或者,您可以使用

\v'(\a+)'

此正则表达式的执行方式与你的正则表达式类似,除非遇到嵌套引号。在正文中:

The user's first 'answer'.

正则表达式将捕获,而原始正则表达式(由 sidyll 更正)将捕获 .\v'(\a+)'answer\v'([^']*)''s first '