web-dev-qa-db-fra.com

Regex d'anticipation positive de Vim

Je ne suis toujours pas habitué à la syntaxe des expressions rationnelles vim. J'ai ce code:

rename_column :keywords, :textline_two_id_4, :textline_two_id_4

Je voudrais faire correspondre le dernier identifiant avec un lookahead positif dans la syntaxe regex des VIM.

Comment ferais-tu ceci?

\id@=_\d$

Cela ne fonctionne pas.

Cette syntaxe Perl fonctionne:

id(?=_\d$)

Modifier - la réponse:

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

Quelqu'un peut-il expliquer la syntaxe?

48
Hendrik

Si vous consultez l'aide de vim, il n'y a pas grand-chose à expliquer: (: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

Cela devrait correspondre au dernier identifiant:

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

enregistrer quelques barres obliques avec "très magique":

/\vid(_\d$)@=

en fait, il semble plus simple d'utiliser le \zs \ze de vim:

id\ze_\d$
62
Kent