เรียกใช้ชื่อไฟล์ปัจจุบันสำหรับรุ่นในบรรทัดคำสั่ง


10

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

vim src/submodule/frontend/frobnicate2.c

และตอนนี้ฉันต้องการแก้ไข../trunk/src/submodule/frontend/frobnicate.cและฉันต้องการแทรก../trunkและลบ2เท่านั้นไม่ใช่พิมพ์เส้นทางแบบเต็ม

แน่นอนว่าฉันสามารถเลื่อนกลับไปที่เชลล์และใช้ประวัติคำสั่งของมันหรือฉันสามารถคัดลอก - วางเส้นทางผ่าน GUI แต่ฉันกำลังมองหาวิธีที่มีประสิทธิภาพมากขึ้นโดยไม่ต้องออกไปเป็นกลุ่ม

คำตอบ:


11

นอกเหนือไปจากการใส่ลงทะเบียนตามที่คุณได้ค้นพบตัวคุณเองคุณยังสามารถใช้%:edit %<Tab>

จาก:help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

ตัวอย่างเช่นคุณสามารถใช้:

:edit %.orig

file.txt.origการแก้ไข ตัวอย่างเช่นคุณต้องการพิมพ์:e ../trunk/%กด<Tab>เพื่อให้ได้ชื่อไฟล์ที่มีเส้นทางญาติและลบก่อนที่จะกด2<Enter>

คุณสามารถเพิ่มตัวดัดแปลงบางอย่างลงในพา ธ เพื่อแก้ไขได้ ฉันพบว่า:hมีประโยชน์อย่างยิ่งจะได้รับ "dirname" (หรือ "head" ใน Vim-speak ") ของเส้นทางปัจจุบัน:

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

คุณสามารถใช้งานได้:hหลายครั้ง ตัวอย่างเช่น:

:edit %:h:h:h/file.txt

จะเปิด file/in/a/deeply/file.txt

นอกจากนี้ยัง:pมีเส้นทางที่ให้คุณเต็มรูปแบบและอาจเป็นประโยชน์ในกรณีของคุณ: พิมพ์:e %:pกด<Tab>และแก้ไขเส้นทางตามที่ต้องการ คุณสามารถใช้ตัวดัดแปลงได้หลายตัวเช่น: :e %:p:h.

ดู:help filename-modifiersรายการทั้งหมด

หมายเหตุ: หากคุณ<Tab>, %เสียงเรียกเข้าจะขยาย หากคุณใช้<C-d>เป็นกลุ่มจะไม่ขยาย%(แต่จะแทนที่ใน%ขณะที่ทำเส้นทาง)


5

โอ้ ค้นหา "ชื่อไฟล์" ใน:help :! มันง่าย: การแทรกพิเศษR egister ความหมายชื่อไฟล์ปัจจุบันCTRL-R %%


1
ดังนั้นการสร้างคำตอบของคุณ: เพื่อให้ได้เส้นทางที่เต็มรูปแบบเช่น OP Ctrl-r =expand('%:p')ตามที่ขอคุณต้องการทำสิ่งที่ชอบ นี้ใช้= ลงทะเบียน
lcd047

3

หากคุณตั้งค่าpathตัวแปรvim ของคุณคุณจะมีอำนาจเต็มของ:findคำสั่งกล่าวคือการทำแท็บเสร็จสิ้นของชื่อไฟล์ (โดยไม่จำเป็นต้องระบุส่วนไดเรกทอรี!)

ในกรณีของคุณบางอย่างเช่น

set path=./**

อาจเป็นสิ่งที่คุณต้องการสำหรับ:fin frob<tab>การทำงาน สำหรับรายละเอียดเต็มไปด้วยเลือด:help find, :help file-searching.


0

นี่คือแผนที่ที่คุณสามารถลองได้:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

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

คุณอาจต้องการเปลี่ยนอักขระที่แมปเป็นอย่างอื่น ฉันชอบใช้ปุ่ม Alt แต่มันไม่ได้ทำงานในอาคารบางแห่ง

เมื่อ Carpetsmoker ชี้ให้เห็นในคำตอบของเขาคุณสามารถเปลี่ยนการเรียกใช้ฟังก์ชันเป็น

expand('%:p')

เพื่อบังคับให้เส้นทางเต็ม


1
นี่จะลบล้างการลงทะเบียนaอย่างไม่มีจุดหมาย ลองทำสิ่งนี้แทน:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.