开发者

vim regexps from the perl's point of view: which special characters to escape with backslash

Imagine, we have to construct a regexp in vi/vim. Which special characters we have to escape with backslash?

By special characters I mean the following chars: {}|()-[]+*.^$?

Seems like we have to escape: {|()+?

And leave as is: }^$*.[]-

Thanks.

p.s. AFAIK, we have no '?' character in vi/vim but '=' instead which shoul开发者_运维问答d be also escaped by backslash.


I think the Vim documentation on magic characters will give you a definitive list.


In vim:

:help magic


I think the simplest way, that will work regardless of vim's magic setting, is

let re = '\V' . escape(fixed_string, '\')

\V disables magic entirely from that point onward in the RE. This means that anything not preceded by a single backslash (well, technically by an odd number of backslashes) is a normal character. Since we escape any backslashes in the fixed string, there can be no magic characters contained in it.

Remember that with \V in effect, you have to backslash-prefix any RE meta-characters. So if you're looking for a line that entirely consists of the fixed string, you would

let full_line_re = '\V\^' . escape(fixed_string, '\') . '\$'

Also keep in mind that vim's ignorecase and smartcase settings will affect RE behaviour. The \C (case-sensitive) and \c (case-insensitive) switches work the same way as \V: they will override those settings for the part of any regexp which follows them.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜