vim regexの「\%」および「\ @」トークンの名前は何ですか?そしてそれは何をしますか?


10

構文ファイルを編集しているときに、次のようなものが見つかりました。

\s*\%(\%(:\@<!\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$

私は以外に精通してる\%\@そこ。名前がわからないのでグーグルすらできません。それが何で、何をするのでしょうか?

回答:


14

グーグルする前に、ドキュメントを試してください:

から :h \%

\%(\)   A pattern enclosed by escaped parentheses.
    Just like \(\), but without counting it as a sub-expression.  This
    allows using more groups and it's a little bit faster.
    {not in Vi}

そして :h \@<!

\@<!    Matches with zero width if the preceding atom does NOT match just
    before what follows.  Thus this matches if there is no position in the
    current or previous line where the atom matches such that it ends just
    before what follows.

    Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
    The match with the preceding atom is made to end just before the match
    with what follows, thus an atom that ends in ".*" will work.
    Warning: This can be slow (because many positions need to be checked
    for a match).  Use a limit if you can, see below.

    Example         matches ~

    \(foo\)\@<!bar      any "bar" that's not in "foobar"

    \(\/\/.*\)\@<!in    "in" which is not after "//"

1
ああ、それが:help引数としてパターンを受け入れることができるかわかりません。それは非常に貴重な情報です。ちなみに名前はありませんね。
Mas Bagol

1
引数としてパターンを正確に受け入れるわけではありません。pattern.txtファイルにはこれらのアイテムに関するトピックがあり、ヘルプタグが関連付けられています(/\%(\)または最初/\%(または2番目のヘルプタグ)。これらのタグはの引数として使用できます。さて、その名前については、またはと同じようにアトムと呼ばれますが、100%確実ではありません。E53/\@<!:h^.
statox

4
@statox 引数としてパターンを正確に受け入れるわけではありません -まあ、それ:helpgrepが目的です。:)
lcd047

@ lcd047くそーどうすればこのコマンドを忘れてしまったのでしょうか?この有用なリマインダーをありがとう:)
statox

1
このサイトは時々私を驚かす傾向があります:現在170の回答をしましたが、これは6番目に賛成ですが、ドキュメントの引用を見つけやすい2つだけしかありませんが、vimscriptコードまたはより複雑なアクションを実現する方法で他の回答があります。 ..なぜこれが「成功」するのか
わかり
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.