สร้างไฟล์ภายใต้เคอร์เซอร์ในกลุ่ม


10

ฉันมีรายการไฟล์

file1.ext
file2.ext
...

ฉันจะสร้างไฟล์ด้วยชื่อ file2.ext ได้อย่างไรถ้าเคอร์เซอร์อยู่ภายใน file2.ext สิ่งที่ชอบgfสำหรับการสร้างไฟล์ใหม่เท่านั้น (นี่เป็นสถานการณ์สมมุติเพียงแค่คิดว่าอาจมีประโยชน์สักวันหนึ่ง)

คำตอบ:


17

สิ่งแรกที่อยู่ในใจของฉันคือการใช้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หรือคำสั่งที่คล้ายกัน


1
+1 สำหรับการสอน<cfile>แทน<C-r><C-f>
sehe

2

ฉันได้รับคำตอบที่ยอดเยี่ยมจาก 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คำสั่งมาตรฐานจะไม่ทำงานที่นี่เพราะนามสกุลไฟล์หายไป)


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