ฉันสามารถใช้นิพจน์ปกติของ Perl ในบรรทัดคำสั่ง vim ได้หรือไม่


27

ฉันต้องการใช้การแสดงออกปกติ Perl บนบรรทัดคำสั่ง vim ตัวอย่างเช่นหากต้องการใช้ประโยชน์จากคำในบรรทัดปัจจุบันคุณสามารถพิมพ์:

:s/(\w+)/\u$1/g

จาก: ช่วย perl-patterns ... regexes ของ Vim นั้นคล้ายกับ Perl's มากที่สุดในแง่ของสิ่งที่คุณสามารถทำได้ ความแตกต่างระหว่างพวกเขาส่วนใหญ่เป็นเพียงสัญกรณ์ uhhmm ... เหมือนกับว่าจีนคล้ายกับกรีกในแง่ของสิ่งที่คุณสามารถสื่อสาร ความแตกต่างส่วนใหญ่เป็นเพียงสัญกรณ์ regex ไม่มีอะไรนอกจากสัญกรณ์! ความแตกต่างนั้นน่ารำคาญหากสัญกรณ์หนึ่งคุ้นเคยน้อยกว่าสัญกรณ์อื่น นั่นเป็นเหตุผลที่ผู้คนถามถึง perl ตั้งแต่แรก!
dreftymac

คำตอบ:


19

คุณสามารถกรองบรรทัดหรือช่วงของบรรทัดใด ๆ ผ่านคำสั่งภายนอกเป็นกลุ่มโดยใช้! เช่นคุณสามารถทำได้:

:.!perl -pe "s/(\w+)/\u\1/g"

ซึ่งจะกรองบรรทัดปัจจุบันผ่านคำสั่งนั้น (ที่นี่:เพื่อเข้าสู่โหมดบรรทัดคำสั่งและสิ่ง.ต่อไปนี้หมายถึงบรรทัดปัจจุบันคุณยังสามารถระบุช่วงบรรทัดหรือ%สำหรับไฟล์ทั้งหมดเป็นต้น)

หากคุณต้องการใช้รูปแบบการทดแทนที่สร้างขึ้นเป็นกลุ่มของ Vim สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับคือการใช้ตัวเลือก "very magic" ที่เป็นกลุ่ม \ v เช่น:

:s/\v(\w+)/\u\1/g

ดู:help patternและ:help substituteสำหรับรายละเอียดเพิ่มเติม ฉันไม่คิดว่า "เวทย์มนตร์มาก" นั้นเหมือนกับรูปแบบของ perl แต่อยู่ใกล้มาก อย่างไรก็ตามคุณสามารถใช้ Perl ได้ตลอดเวลาหากคุณคุ้นเคยกับมันมากกว่า


1
ด้วยเวทมนตร์ที่ยอดเยี่ยมคุณไม่จำเป็นต้องจดจำสิ่งที่(ได้รับการปฏิบัติเป็นพิเศษในขณะที่{ไม่ใช่: "อักขระ ASCII ทั้งหมดยกเว้น '0' - '9', 'a' - 'z', 'A' - 'Z' และ '_' มีความหมายพิเศษ " ขอบคุณ!
Ayrat

10

ไม่คุณไม่สามารถใช้การแสดงออกปกติของ Perl ในแบบนั้นได้ สำหรับความช่วยเหลือในการเรียนรู้ Vim ที่เทียบเท่าสำหรับองค์ประกอบนิพจน์ปกติของ Perl ดู

:help perl-patterns

อย่างไรก็ตามคุณสามารถใช้ Perl เป็นตัวกรองภายนอกตามที่อธิบายโดย frabjous คุณยังสามารถรันคำสั่ง Perl ภายใน Vim โดยใช้อินเตอร์เฟส Perl หาก Vim ของคุณถูกคอมไพล์ด้วย+perlฟีเจอร์ ดู

:help if_perl.txt

2
+1 :help perl-patternsได้แก้ไขสิ่งหนึ่งที่ก่อนหน้านี้ฉันเกลียดเกี่ยวกับ vim
Mark K Cowan

8

คุณยังสามารถใช้:

/\v"your regex"

แทน:

/"your regex"

นี่คือคำตอบที่ฉันกำลังมองหา!
alextercete

นอกจากนี้คุณยังสามารถช่วยตัวเองด้วยการเพิ่มnnoremap / /\vและvnoremap / /\v. vimrc ของคุณเพื่อให้เมื่อคุณพิมพ์/มันก็ใช้งานได้
mattmc3


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