52

我仍然不太习惯 vim 正则表达式语法。我有这个代码:

rename_column :keywords, :textline_two_id_4, :textline_two_id_4

我想将最后一个 id 与 VIM 正则表达式语法中的积极前瞻相匹配。

你会怎么做?

\id@=_\d$

这不起作用。

这个 perl 语法有效:

id(?=_\d$)

编辑 - 答案:

/id\(_\d$\)\@=

有人可以解释语法吗?

4

1 回答 1

71

如果你查看 vim 帮助,没有太多解释:( :h \@=)

\@=     Matches the preceding atom with zero width. {not in Vi}
        Like "(?=pattern)" in Perl.
        Example             matches
        foo\(bar\)\@=       "foo" in "foobar"
        foo\(bar\)\@=foo    nothing

这应该与最后一个 id 匹配:

/id\(_\d$\)\@=

用“非常神奇”保存一些反斜杠:

/\vid(_\d$)@=

实际上,使用 vim 看起来更简单\zs \ze

id\ze_\d$
于 2013-08-22T22:34:08.373 回答