ฉันต้องการใช้การแสดงออกปกติ Perl บนบรรทัดคำสั่ง vim ตัวอย่างเช่นหากต้องการใช้ประโยชน์จากคำในบรรทัดปัจจุบันคุณสามารถพิมพ์:
:s/(\w+)/\u$1/g
ฉันต้องการใช้การแสดงออกปกติ Perl บนบรรทัดคำสั่ง vim ตัวอย่างเช่นหากต้องการใช้ประโยชน์จากคำในบรรทัดปัจจุบันคุณสามารถพิมพ์:
:s/(\w+)/\u$1/g
คำตอบ:
คุณสามารถกรองบรรทัดหรือช่วงของบรรทัดใด ๆ ผ่านคำสั่งภายนอกเป็นกลุ่มโดยใช้! เช่นคุณสามารถทำได้:
:.!perl -pe "s/(\w+)/\u\1/g"
ซึ่งจะกรองบรรทัดปัจจุบันผ่านคำสั่งนั้น (ที่นี่:
เพื่อเข้าสู่โหมดบรรทัดคำสั่งและสิ่ง.
ต่อไปนี้หมายถึงบรรทัดปัจจุบันคุณยังสามารถระบุช่วงบรรทัดหรือ%
สำหรับไฟล์ทั้งหมดเป็นต้น)
หากคุณต้องการใช้รูปแบบการทดแทนที่สร้างขึ้นเป็นกลุ่มของ Vim สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับคือการใช้ตัวเลือก "very magic" ที่เป็นกลุ่ม \ v เช่น:
:s/\v(\w+)/\u\1/g
ดู:help pattern
และ:help substitute
สำหรับรายละเอียดเพิ่มเติม ฉันไม่คิดว่า "เวทย์มนตร์มาก" นั้นเหมือนกับรูปแบบของ perl แต่อยู่ใกล้มาก อย่างไรก็ตามคุณสามารถใช้ Perl ได้ตลอดเวลาหากคุณคุ้นเคยกับมันมากกว่า
(
ได้รับการปฏิบัติเป็นพิเศษในขณะที่{
ไม่ใช่: "อักขระ ASCII ทั้งหมดยกเว้น '0' - '9', 'a' - 'z', 'A' - 'Z' และ '_' มีความหมายพิเศษ " ขอบคุณ!
ไม่คุณไม่สามารถใช้การแสดงออกปกติของ Perl ในแบบนั้นได้ สำหรับความช่วยเหลือในการเรียนรู้ Vim ที่เทียบเท่าสำหรับองค์ประกอบนิพจน์ปกติของ Perl ดู
:help perl-patterns
อย่างไรก็ตามคุณสามารถใช้ Perl เป็นตัวกรองภายนอกตามที่อธิบายโดย frabjous คุณยังสามารถรันคำสั่ง Perl ภายใน Vim โดยใช้อินเตอร์เฟส Perl หาก Vim ของคุณถูกคอมไพล์ด้วย+perl
ฟีเจอร์ ดู
:help if_perl.txt
:help perl-patterns
ได้แก้ไขสิ่งหนึ่งที่ก่อนหน้านี้ฉันเกลียดเกี่ยวกับ vim
คุณยังสามารถใช้:
/\v"your regex"
แทน:
/"your regex"
nnoremap / /\v
และvnoremap / /\v
. vimrc ของคุณเพื่อให้เมื่อคุณพิมพ์/
มันก็ใช้งานได้
นี่คือวิธีการแก้ปัญหาจากhttp://vim.wikia.com/wiki/Perl_compatible_regular_expressions
:perldo s/(\w+)/\u$1/g
(ตรวจสอบกับ:ver
ที่+perl
หรือ+perl/dyn
จะรวบรวมใน.)
ใช้ปลั๊กอินeregex.vim มันมีประโยชน์มากและฉันไม่มีปัญหากับมัน