ฉันจะใช้เนื้อหาตัวแปรเป็นอาร์กิวเมนต์สำหรับคำสั่ง vim ได้อย่างไร


12

เช่นสมมติว่าฉันทำ

:let foo=pattern

และตอนนี้ฉันต้องการที่จะดำเนินการGgrep patterแต่ใช้ตัวแปรfooแทนpatterสตริงตัวอักษร

:echo foo

เอาท์พุทpatternแต่

:Ggrep foo

แค่มองหาฟู

UPDATE:

การสร้างชุดคำสั่งและเรียกใช้: รันบนมันไม่ใช่โซลูชัน แต่เป็นแฮ็ค และมันจะแตกหักด้วยค่าตัวแปรที่ไม่สำคัญ


สิ่งที่เป็นGgrep(เมืองหลวง G?)?
กิระ

คอมไพล์ grep จากปลั๊กอิน 'fugutive'
Vitaly Kushner

คำสั่งตัวอย่างผิด ควรปล่อยให้ foo = 'pattern' บอกว่า: ดำเนินการเป็นแฮ็คผิดทั้งหมด นั่นคือทางออก: คุณต้องการให้กลุ่มประเมินคำสั่งก่อนที่จะดำเนินการ
albfan

คำตอบ:


2

มันไม่เกี่ยวกับตัวแปร แต่บางทีคำสั่งตัวย่อ vim สามารถช่วยได้ ลองจากบรรทัดคำสั่ง:

:abbreviate foo pattern

แล้วก็

:Ggrep foo<space>

มันจะเสร็จสิ้น 'foo' เป็น 'รูปแบบ' ของคุณ


echo fooตอนนี้พยายามที่จะเรียก Opps echo patternซึ่งไม่ใช่ตัวแปร นี่คือการแฮ็กและการแนะนำที่ผิด
albfan

7

เกี่ยวกับ:

:execute ':grep ' . foo

ฉันจะหนีเนื้อหาของ foo ได้อย่างถูกต้องได้อย่างไร มันอาจมีตัวอักษรพิเศษเช่น ", ', /, \, ฯลฯ
Vitaly Kushner

1
@Vitaly Kushner: ดู ": ช่วยหลบหนี ()" และ ": ช่วย fnameescape ()"
garyjohn

ฉันรู้ว่าการหลบหนี () แต่ไม่แน่ใจเกี่ยวกับตัวละครที่จะหลบหนี
Vitaly Kushner

fnameescape () ไม่ดีไม่ใช่อาร์กิวเมนต์ของชื่อไฟล์มันเป็นฟังก์ชั่น arg สำหรับปลั๊กอิน สมมติว่าฉัน: let foo = "aaa \" bbbb'cccc "
Vitaly Kushner

1
ฉันกำลังดึงผมของฉันออกมามากกว่านี้เช่นกัน คุณไม่สามารถออกคำสั่งอย่างlet xyz = tabpagenr()นั้นtabnext xyzได้ ภาษาสคริปต์ของ Vim นั้นสมบูรณ์แบบเช่นเดียวกับสภาพแวดล้อมที่เป็นกิริยาช่วยของมัน
puk

2

หากคุณไม่ชอบ:exeวิธีแก้ปัญหาคุณสามารถ "อ่าน" เนื้อหาของตัวแปรลงในบรรทัดคำสั่งโดยใช้=นิพจน์รีจิสเตอร์ ตัวอย่างเช่นพิมพ์:Ggrepแล้วกดCtrl- rแล้วพิมพ์และกด=foo Enterสมมติว่าตัวแปรfooมี "pattern" ตอนนี้บรรทัดคำสั่งของคุณควรมีลักษณะดังนี้:

:Ggrep pattern

นี่เป็นข้อดีที่คุณสามารถเห็นคำสั่งจริงที่จะเรียกใช้และแม้แต่แก้ไขก่อนกดEnterครั้งที่สอง

ดู:

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