vim 정규식에서 '\ %'및 '\ @'토큰의 이름은 무엇입니까? 그리고 그것은 무엇을 하는가?


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파일은 이러한 항목에 대한 항목 따라서 그들이 도움 태그 관련 (이있다 /\%(\)거나 /\%(또는 E53처음과 /\@<!두 번째 용) 및 태그의 인수로 사용할 수 있습니다 :h. 이제 그들의 이름에 관해서는, ^또는 그것들과 같은 원자라고 말하고 싶지만 .100 % 확신 할 수는 없습니다.
statox

4
@statox 패턴을 인수로 정확하게 받아들이지 않습니다 -글쎄, 그게 :helpgrep목적입니다. :)
lcd047

@ lcd047 젠장, 어떻게이 명령을 잊었 을까?! 이 유용한 정보에 감사드립니다 :)
statox

1
이 사이트는 때때로 나를 놀라게하는 경향이 있습니다. 현재 170 개의 답변을 했으며이 문서는 6 번째로 가장 많이 찬성되었지만 doc의 인용 부호를 쉽게 찾을 수있는 두 가지만 포함하는 반면 vimscript 코드로 다른 답변이 있거나 더 복잡한 동작을 실현하는 방법이 있습니다. .. 왜 이것이 "성공적인지"
모르겠습니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.