หลังจากการค้นหาบางอย่างฉันจะรู้ว่า:echo @%
แสดงชื่อไฟล์ปัจจุบันในบรรทัดล่างสุดของหน้าจอ vim
ผมอยากจะถ่ายโอนข้อมูลชื่อไฟล์ (ที่มีและไม่มีเส้นทางแบบเต็ม) vim
ลงในเนื้อหาของไฟล์โดยไม่ต้องออก
มีวิธีการทำเช่นนี้?
หลังจากการค้นหาบางอย่างฉันจะรู้ว่า:echo @%
แสดงชื่อไฟล์ปัจจุบันในบรรทัดล่างสุดของหน้าจอ vim
ผมอยากจะถ่ายโอนข้อมูลชื่อไฟล์ (ที่มีและไม่มีเส้นทางแบบเต็ม) vim
ลงในเนื้อหาของไฟล์โดยไม่ต้องออก
มีวิธีการทำเช่นนี้?
คำตอบ:
ฉันแน่ใจว่ามีวิธีอื่นในการทำเช่นนี้ ... แต่คำสั่งหลักที่คุณต้องการคือการ:r[ead]
แทรกเอาท์พุทของคำสั่งลงในบัฟเฟอร์
ดังนั้นเพื่อแทรกเพียงชื่อไฟล์:
:r! echo %
และเพื่อรวมเส้นทางแบบเต็ม:
:r! echo %:p
สำหรับข้อมูลเพิ่มเติม:
:help read
:help filename-modifiers
ชื่อไฟล์ปัจจุบันอยู่ในการ"%
ลงทะเบียนดังนั้นคุณสามารถแทรก (ในขณะที่อยู่ในโหมดแทรก) ด้วย<c-r>%
; <c-r>=expand("%:p")
เส้นทางแบบเต็มสามารถแทรกด้วย คุณสามารถสร้างมาโครได้ถ้าคุณใช้บ่อย สำหรับข้อมูลเพิ่มเติมเทคนิคที่คล้ายกันดูและ:h expand
:h "=
<c-r>
ระบุว่าอักขระตัวถัดไปคือรีจิสเตอร์
"%p
ในโหมดปกติหรือภาพ
อย่างที่สามารถเห็นได้ใน:h registers
การ"%
ลงทะเบียนมีชื่อไฟล์ปัจจุบัน :pu[t]
คำสั่งแทรกเนื้อหาของการลงทะเบียนลงในข้อความ
ดังนั้นในการแทรกชื่อไฟล์จริงคุณสามารถพิมพ์อย่างใดอย่างหนึ่งเหล่านี้ในโหมดคำสั่ง:
:put %
หรือ
"%p
ในการแทรกชื่อไฟล์ด้วยพา ธ เต็มให้พิมพ์
:put=expand('%:p')
ในโหมดคำสั่ง
ข้อมูลเพิ่มเติม:
:h pu[t]
โดยการพิมพ์คุณสามารถวางเนื้อหาของการลงทะเบียน"rp
"r
:put "%:p"
ดูเหมือนจะไม่ทำงานสำหรับฉัน ดูเหมือนว่าจะใช้งานได้เฉพาะกับExpand ()เช่นเดียวกับใน: :put =expand('%:p')
ซึ่งทำให้ไม่ยุ่งยากน้อยกว่าอย่าง<c-r>=expand('%:p')
น่าเสียดาย
วิธีง่ายๆในการรัน:
!!echo %
!!
กำลังแทนที่บรรทัดปัจจุบันด้วยผลลัพธ์ของคำสั่งที่ตามมา
%
ถูกแทนที่ด้วยชื่อของไฟล์ที่ถูกแก้ไขในคำสั่งดังนั้นสิ่งนี้จะแทรกชื่อนั้นในไฟล์ที่ถูกแก้ไขได้อย่างมีประสิทธิภาพ
ชื่อไฟล์คือชื่อที่คุณส่งไปยังคำสั่ง vi (m) และอาจมีพา ธ สัมพัทธ์หรือพา ธ สัมบูรณ์ หากคุณต้องการตัดมันและเก็บชื่อไฟล์ไว้เท่านั้นให้เรียกใช้
!!basename %
หากคุณต้องการทำสิ่งนี้บ่อยครั้งอาจเป็นประโยชน์ในการผูกลำดับสำคัญกับสิ่งที่คุณต้องการตาม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
(ที่ลำไส้ใหญ่นำในบรรทัดเป็นตัวเลือก)
ฉัน googling เป็นวิธีที่ง่ายที่สุดในการแทรกชื่อไฟล์ปัจจุบัน (ไม่มีเส้นทางหรือส่วนขยาย) ไปยังตำแหน่งปัจจุบัน (ไม่มีบรรทัดใหม่ไม่มีการแทนที่บรรทัดปัจจุบัน) ดังนั้นเมื่อรวมคำตอบก่อนหน้านี้กับลิงก์นี้เข้าด้วยกันนี่คือสิ่งที่ฉันต้องการ
ในโหมดแทรก :
<C-R>=expand("%:t:r")
จากนั้นในครั้งถัดไป (พร้อมกับคำสั่งในประวัติศาสตร์แล้ว):
<C-R>=<UP>
<c-r>
แมปเป็นคำสั่งทำซ้ำ?