ฉันมีรายการไฟล์
file1.ext
file2.ext
...
ฉันจะสร้างไฟล์ด้วยชื่อ file2.ext ได้อย่างไรถ้าเคอร์เซอร์อยู่ภายใน file2.ext สิ่งที่ชอบgf
สำหรับการสร้างไฟล์ใหม่เท่านั้น (นี่เป็นสถานการณ์สมมุติเพียงแค่คิดว่าอาจมีประโยชน์สักวันหนึ่ง)
ฉันมีรายการไฟล์
file1.ext
file2.ext
...
ฉันจะสร้างไฟล์ด้วยชื่อ file2.ext ได้อย่างไรถ้าเคอร์เซอร์อยู่ภายใน file2.ext สิ่งที่ชอบgf
สำหรับการสร้างไฟล์ใหม่เท่านั้น (นี่เป็นสถานการณ์สมมุติเพียงแค่คิดว่าอาจมีประโยชน์สักวันหนึ่ง)
คำตอบ:
สิ่งแรกที่อยู่ในใจของฉันคือการใช้touch
คำสั่งผ่านมันชื่อไฟล์ภายใต้เคอร์เซอร์
:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>
แต่มีโซลูชั่น Vim ที่บริสุทธิ์พกพาข้ามแพลตฟอร์มได้ ฟังก์ชั่นในตัวwritefile
เขียนรายการไปยังไฟล์ทีละบรรทัด ตามธรรมชาติแล้วเมื่อรายการอินพุตว่างเปล่ามันจะสร้างไฟล์เปล่า (ดู:help writefile
รายละเอียด) เราสามารถใช้ประโยชน์จากผลข้างเคียงนี้:
:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>
โปรดทราบว่าการแยกชื่อไฟล์สามารถปรับได้โดยใช้expand
รูปแบบอื่น (ดู:help expand()
)
ถ้าใครไม่ต้องการสร้างไฟล์ แต่เพียงเปิดไฟล์เพื่อทำการแก้ไขเราสามารถกำหนดการgf
แมปที่คล้ายกันได้:
:map <leader>gf :e <cfile><cr>
ที่:e
คำสั่งสามารถถูกแทนที่ด้วย:tabe
หรือคำสั่งที่คล้ายกัน
ฉันได้รับคำตอบที่ยอดเยี่ยมจาก ib ด้านบนและขยายมันดังนี้ เป้าหมายของฉันคือใช้เสียงเรียกเข้าเพื่อสร้างไฟล์มาร์กอัปใหม่ตามต้องการสำหรับวิกิ (ในกรณีนี้คือวิกิ Gollum)
ฉันพยายามครั้งแรก:
map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>`
ข้างต้นทำงานตามที่ระบุไว้ในคำตอบ อย่างไรก็ตามในตอนแรกฉันคิดว่ามันไม่ทำงานเพราะฉันไม่ได้เห็นการเปิดไฟล์ในกลุ่ม การใช้รหัสสองบิตด้านล่างจะเปิดไฟล์ใหม่ - นี่คือสิ่งที่ฉันกำลังมองหา ดังนั้นฉันรวมพวกเขาและพยายาม:
map <leader>cf :e <cfile><cr>
แต่นั่นใช้ไม่ได้กับ wiki เพราะเมื่อคุณพยายามสร้างไฟล์ใหม่ใน wiki โดยใช้ไวยากรณ์เช่น[[the-new-file]]
ไวยากรณ์ wiki ไม่อนุญาตให้มีการขยายไฟล์ในวงเล็บ อย่างไรก็ตาม Vim จำเป็นต้องรู้นามสกุลเมื่อสร้างไฟล์ใหม่เพื่อให้มันใช้งานได้ ในกรณีนี้ฉันใช้:
map <leader>cf :e <cfile>.md<cr>
ดังนั้นฉันสามารถสร้างไฟล์มาร์กอัปใหม่ได้ มีวิธีในการปรับแต่งเพิ่มเติมนี้ (ตัวอย่างเช่นโดยไม่ hardcoding ส่วนขยาย) แต่ข้างต้นทำงานได้ดีสำหรับความต้องการของฉัน หากฉันต้องการส่วนขยายอื่น (เช่นบันทึกไฟล์. wiki) ฉันอาจจะใช้เส้นทางที่เรียบง่ายและทำแผนที่อื่นเช่น:
map <leader>cwf :e <cfile>.wiki<cr>
คุณสามารถใช้คำสั่งเดียวกันเพื่อเปิดไฟล์มาร์กอัปที่มีอยู่แล้ว ( gf
คำสั่งมาตรฐานจะไม่ทำงานที่นี่เพราะนามสกุลไฟล์หายไป)
gf
set suffixesadd=.wiki
ถ้าผลงาน รุ่นที่ปรับปรุงแล้วของคุณcf
จะเป็นรุ่นที่ให้ความเคารพsuffixesadd
อย่างน้อยในกรณีที่มีเพียงหนึ่งรายการ
<cfile>
แทน<C-r><C-f>