ชื่อโทเค็น '\%' และ '\ @' ใน vim regex คืออะไร แล้วมันทำอะไร?


10

ขณะแก้ไขไฟล์ไวยากรณ์ฉันพบสิ่งที่ชอบ:

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

ฉันคุ้นเคยกับคนอื่นมากกว่า\%และที่\@นั่น ฉันไม่สามารถทำ Google ด้วยซ้ำเพราะไม่รู้ว่าชื่ออะไร ดังนั้นมันคืออะไรและมันทำอะไร?

คำตอบ:


14

ก่อนที่จะ googling ลองใช้ doc:

จาก :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 .. ฉันไม่เข้าใจว่าทำไมอันนี้จึง "ประสบความสำเร็จ"
statox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.