การขยายเปอร์เซ็นต์โหมดคำสั่งเป็นกลุ่ม


2

เวิร์กโฟลว์ประจำวันทั่วไปของฉันใน Vim เกี่ยวข้องกับการมีบานหน้าต่างแนวตั้งสองบาน รหัสการผลิตทางด้านซ้ายและการทดสอบทางด้านขวา

ฉันสลับภาษา (และกรอบการทดสอบ) บ่อยครั้งดังนั้นฉันต้องการสร้างการแมปใหม่สำหรับการเรียกใช้รหัสทดสอบของฉันในแต่ละเซสชัน lib/importer.rbสมมติว่าฉันทำบางโครงการทับทิมและฉันขับรถออกมาจากชั้นใน spec/lib/importer_spec.rbรายละเอียดที่มาพร้อมกับอาศัยอยู่ใน

หากต้องการสร้างการแมปของฉันสำหรับการเรียกใช้ข้อมูลจำเพาะฉันจะมุ่งเน้นไปที่บานหน้าต่างแสดงรายละเอียดและป้อนข้อมูลต่อไปนี้:

:nnoremap -g :!rspec %<cr>

หมายเหตุ: ฉันใช้ยัติภังค์ / ลบเป็นรหัสผู้นำของฉัน

นี้ทำงาน -gแต่ถ้าบานหน้าต่างข้อมูลจำเพาะมีโฟกัสเมื่อฉันตี หากบานหน้าต่างการผลิตมีโฟกัสและฉันกดปุ่มแผนที่rspecจะลองและเรียกใช้รหัสการผลิตซึ่งไม่สมเหตุสมผล

เพื่อหลีกเลี่ยงปัญหานี้ฉันสามารถเขียนพา ธ สัมบูรณ์ไปยังไฟล์ข้อมูลจำเพาะ:

:nnoremap -g :!rspec spec/lib/importer_spec.rb<cr>

ใช้งานได้แม้ว่ามันจะค่อนข้างยุ่งยากในการเขียน

ในขณะที่อ่านVim ที่ใช้งานได้เมื่อคืนฉันรู้ว่าในโหมดคำสั่งคุณสามารถใช้ส่วน%ขยาย - คุณเขียน%แล้วกดtabและเปอร์เซ็นต์จะถูกแทนที่ด้วยพา ธ สัมบูรณ์ไปยังไฟล์ในบานหน้าต่างที่เน้นอยู่ในปัจจุบัน

ถ้าฉันทำสิ่งนี้:

:!rspec %

... และจากนั้นtabฉันได้รับสิ่งนี้:

:!rspec spec/lib/importer_spec.rb

และนั่นยอดเยี่ยม! อย่างไรก็ตามถ้าฉันทำสิ่งนี้:

:nnoremap -g :!rspec %

... และจากนั้นtabฉันได้รับสิ่งนี้:

:nnoremap -g :!rspec %^I

ฉันเป็นคนดีและฉันก็จ่ายภาษี ทำไมสิ่งนี้ถึงเกิดขึ้นกับฉัน

คำตอบ:


5

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

:nnoremap -g :!rspec <C-r>=expand('%')<cr><cr>

PS: เพื่อจัดการกับชื่อไฟล์ทุกประเภทอย่างถูกต้องใช้เพิ่มเติมshellescape():

:nnoremap -g :!rspec <C-r>=shellescape(expand('%'), 1)<cr><cr>

PPS: ฉันหวังว่าคุณจะไม่พิมพ์ด้วยตนเองในการทำแผนที่ทุกครั้ง แต่ใช้ปลั๊กอินประเภทไฟล์หรือ:autocmdเพื่อกำหนดสิ่งนี้โดยอัตโนมัติสำหรับบัฟเฟอร์ทดสอบ ฉันขอแนะนำให้ทำอย่างนั้นโดยอัตโนมัติ

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