ฉันจะแทรกชื่อไฟล์ปัจจุบันลงในเนื้อหาใน Vim ได้อย่างไร


38

หลังจากการค้นหาบางอย่างฉันจะรู้ว่า:echo @%แสดงชื่อไฟล์ปัจจุบันในบรรทัดล่างสุดของหน้าจอ vim

ผมอยากจะถ่ายโอนข้อมูลชื่อไฟล์ (ที่มีและไม่มีเส้นทางแบบเต็ม) vimลงในเนื้อหาของไฟล์โดยไม่ต้องออก

มีวิธีการทำเช่นนี้?

คำตอบ:


27

ฉันแน่ใจว่ามีวิธีอื่นในการทำเช่นนี้ ... แต่คำสั่งหลักที่คุณต้องการคือการ:r[ead]แทรกเอาท์พุทของคำสั่งลงในบัฟเฟอร์

ดังนั้นเพื่อแทรกเพียงชื่อไฟล์:

:r! echo %

และเพื่อรวมเส้นทางแบบเต็ม:

:r! echo %:p

สำหรับข้อมูลเพิ่มเติม:

:help read
:help filename-modifiers 

37

ชื่อไฟล์ปัจจุบันอยู่ในการ"%ลงทะเบียนดังนั้นคุณสามารถแทรก (ในขณะที่อยู่ในโหมดแทรก) ด้วย<c-r>%; <c-r>=expand("%:p")เส้นทางแบบเต็มสามารถแทรกด้วย คุณสามารถสร้างมาโครได้ถ้าคุณใช้บ่อย สำหรับข้อมูลเพิ่มเติมเทคนิคที่คล้ายกันดูและ:h expand:h "=


บางทีฉันอาจจะเข้าใจผิด แต่ก็ไม่ได้<c-r>แมปเป็นคำสั่งทำซ้ำ?
JC Yamokoski

10
ในโหมดแทรก<c-r>ระบุว่าอักขระตัวถัดไปคือรีจิสเตอร์
Kevin

ใช่แล้วขอบคุณ ลืมเปลี่ยนเป็นโหมดแทรกทั้งหมด ...
JC Yamokoski

คุณยังสามารถทำ"%pในโหมดปกติหรือภาพ
naught101

15

อย่างที่สามารถเห็นได้ใน:h registersการ"%ลงทะเบียนมีชื่อไฟล์ปัจจุบัน :pu[t]คำสั่งแทรกเนื้อหาของการลงทะเบียนลงในข้อความ

ดังนั้นในการแทรกชื่อไฟล์จริงคุณสามารถพิมพ์อย่างใดอย่างหนึ่งเหล่านี้ในโหมดคำสั่ง:

:put %

หรือ

"%p

ในการแทรกชื่อไฟล์ด้วยพา ธ เต็มให้พิมพ์

:put=expand('%:p')

ในโหมดคำสั่ง


ข้อมูลเพิ่มเติม:

:h pu[t]

โดยการพิมพ์คุณสามารถวางเนื้อหาของการลงทะเบียน"rp"r


3
:put "%:p"ดูเหมือนจะไม่ทำงานสำหรับฉัน ดูเหมือนว่าจะใช้งานได้เฉพาะกับExpand ()เช่นเดียวกับใน: :put =expand('%:p')ซึ่งทำให้ไม่ยุ่งยากน้อยกว่าอย่าง<c-r>=expand('%:p')น่าเสียดาย
akavel

@ akavel คุณถูกต้องฉันจะอัปเดตคำตอบ ขอขอบคุณ! ;) และแน่นอนทั้งสองเป็น verbose อย่างเท่าเทียมกัน
braunmagrin

5

วิธีง่ายๆในการรัน:

!!echo %
  • !! กำลังแทนที่บรรทัดปัจจุบันด้วยผลลัพธ์ของคำสั่งที่ตามมา

  • % ถูกแทนที่ด้วยชื่อของไฟล์ที่ถูกแก้ไขในคำสั่งดังนั้นสิ่งนี้จะแทรกชื่อนั้นในไฟล์ที่ถูกแก้ไขได้อย่างมีประสิทธิภาพ

ชื่อไฟล์คือชื่อที่คุณส่งไปยังคำสั่ง vi (m) และอาจมีพา ธ สัมพัทธ์หรือพา ธ สัมบูรณ์ หากคุณต้องการตัดมันและเก็บชื่อไฟล์ไว้เท่านั้นให้เรียกใช้

!!basename %

1

หากคุณต้องการทำสิ่งนี้บ่อยครั้งอาจเป็นประโยชน์ในการผูกลำดับสำคัญกับสิ่งที่คุณต้องการตามhttp://vim.wikia.com/wiki/Insert_current_filename

แทรกชื่อไฟล์ปัจจุบันโดยไม่มีนามสกุลที่ตำแหน่งเคอร์เซอร์เมื่อคุณอยู่ในโหมดแทรก

:inoremap \fn <C-R>=expand("%:t:r")<CR>

หากต้องการใช้ส่วนขยายต่อไป:

:inoremap \fn <C-R>=expand("%:t")<CR>

ในการแทรกพา ธ สัมบูรณ์ของไดเรกทอรีไฟล์นั้นถูกใช้งาน:

:inoremap \fn <C-R>=expand("%:p:h")<CR>

ในการแทรกพา ธ สัมพัทธ์ของไดเรกทอรีไฟล์นั้นถูกใช้งาน:

:inoremap \fn <C-R>=expand("%:h")<CR>

ข้างต้นทั้งหมดทำงานโดยตรงในvimเซสชั่นหรือคุณสามารถวางไว้ใน.vimrc(ที่ลำไส้ใหญ่นำในบรรทัดเป็นตัวเลือก)


0

ฉัน googling เป็นวิธีที่ง่ายที่สุดในการแทรกชื่อไฟล์ปัจจุบัน (ไม่มีเส้นทางหรือส่วนขยาย) ไปยังตำแหน่งปัจจุบัน (ไม่มีบรรทัดใหม่ไม่มีการแทนที่บรรทัดปัจจุบัน) ดังนั้นเมื่อรวมคำตอบก่อนหน้านี้กับลิงก์นี้เข้าด้วยกันนี่คือสิ่งที่ฉันต้องการ

ในโหมดแทรก :

<C-R>=expand("%:t:r")

จากนั้นในครั้งถัดไป (พร้อมกับคำสั่งในประวัติศาสตร์แล้ว):

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