Vim相当于`preg_quote()`和`quotemeta`

时间:2011-08-17 13:09:08

标签: regex vim

在vimscript中,我可以使用matchstr()matchlist()

匹配内容

但是如果我必须在模式中附加一个 用户提供的字符串 呢? 我怎样才能引用元字符?

1 个答案:

答案 0 :(得分:2)

我认为没有任何东西可以做到这一点,但你可以使用一个可能足够好的魔法修饰符。假设您有以下表达式:

let pattern = '\<'.word.'\>'

如果word是用户提供的字符串,那么(如果我理解正确的话)你想忽略其中的所有特殊修饰符。要做到这一点,使用“非常无畏模式”。通过在模式前面放置一个“\ V”,可以使模式的行为几乎像文字字符串。然后,输入“\ m”以恢复正常行为。在这种情况下:

let pattern = '\<\V'.word.'\m\>'

但请注意,这不是完全您所要求的。如果用户输入foo(*bar),它将正常工作,但如果它是foo(\*bar),则不会,因为\*对被解释为星形修饰符。如果您不了解这些模式,请尝试:help /\V以更好地了解魔法是如何运作的。