ฉันจะเพิ่มข้อความ Skeleton ลงในไฟล์ vim ใหม่ได้อย่างไร


9

ฉันใช้ Vim สำหรับการเขียน C ++ และฉันมี#include<>คำสั่งความเห็นและอื่น ๆ ที่ฉันต้องรวมไว้ในไฟล์ใหม่แต่ละไฟล์ที่ฉันสร้างขึ้น ฉันได้เพิ่ม

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) 

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


1
คุณลองแก้ไขไฟล์ C ++ ใหม่หลังจากเพิ่มไฟล์นี้autocmdและสร้างไฟล์ Skeleton หรือไม่?
muru

1
ฉันพยายามสร้างไฟล์ใหม่ด้วยนามสกุลไฟล์. cpp และแก้ไขด้วย Vim เมื่อเปิดมันเพื่อแก้ไขมันยังว่างอยู่หรือเปล่ามีขั้นตอนอื่นที่ฉันต้องทำอีกหรือไม่
electriccello

2
ไม่คุณควรเห็นเนื้อหาของไฟล์ Skeleton รวมอยู่แล้ว ถ้าคุณทำงานด้วยตนเอง:r C:\(full file path of skeleton text file)? คุณได้รับข้อผิดพลาดหรือไม่?
muru

3
@electriccello Ah :enewไม่ทำงาน แต่:e newfile.cppควรทำงานหากnewfile.cppยังไม่มีอยู่ (แม้ว่าจะว่างเปล่า)
muru

5
เหตุผลที่ใช้การ:enewไม่ได้เพราะคุณกำลังแก้ไขบัฟเฟอร์ใหม่ที่ไม่มีชื่อแล้วบันทึกเป็นไฟล์. cpp BufNewFileทริกเกอร์เฉพาะในกรณีที่คุณแก้ไขไฟล์ใหม่ด้วยชื่อไฟล์เป้าหมาย
fruglemonkey

คำตอบ:


6

ข้อความ Skeleton จากไฟล์ที่มีอยู่สามารถเพิ่มลงในไฟล์ใหม่โดยการแทรกบรรทัด

autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file)

เข้าไปใน vimrc BufNewFileเหตุการณ์ไม่ทำงานถ้าไฟล์ใหม่จะถูกสร้างขึ้นในขั้นตอนที่สองใช้แล้ว:enew :sav filenameแต่การสร้างไฟล์ใหม่โดยใช้:e filenameทริกเกอร์คำสั่งอัตโนมัติของBufNewFileเหตุการณ์ใน vimrc โดยเพิ่มเนื้อหาของไฟล์ข้อความ Skeleton เข้าไปในไฟล์ที่สร้างขึ้นใหม่


1
:help templateยังเห็น
Martin Tournoij

เพื่อป้องกันไม่ให้.vimrcแออัดของฉันมีสถานที่อื่น ๆ ใน~/.vim/ลำดับชั้นฉันสามารถใส่ลงใน?
Santosh Kumar

นอกจากนี้ยังเพิ่มบรรทัดว่างเพิ่มเติมที่ด้านบนในไฟล์ใหม่
Santosh Kumar

5

อันที่จริงแล้วปลั๊กอินตัวขยายเทมเพลตจะช่วยคุณในงานนี้ :readเป็นขั้นตอนที่ 0 ของปลั๊กอินตัวขยายเทมเพลต

ตัวอย่างเช่นmu-templateจะพยายามรวม foo.h จาก foo.cpp หากตรวจพบ foo.h นอกจากนี้ยังอนุญาตให้ขยายส่วนหัวด้วยข้อมูลไดนามิกภายใน (วันที่ผู้สร้างใบอนุญาต / ลิขสิทธิ์ ฯลฯ )


1

ในการตั้งค่าโครงกระดูกเริ่มต้นสำหรับทุกประเภทไฟล์และปรับแต่งสำหรับโครงการเฉพาะ:

function! s:load_skeleton(type)
  " do nothing if no filetype
  if empty(a:type) | return | endif

  " glob every directory of rtp to search for skeleton/filetype
  let skeletons = globpath(&rtp, 'skeleton/' . a:type, 0, 1)
  if empty(skeletons) | return | endif

  " read last skeleton into 1st line.
  exe '0read ' . skeletons[-1]
endfunction

augroup aug_skeleton
  au!

  " BufNewFile event is trigged when you edit a new file.
  autocmd BufNewFile * call s:load_skeleton(&filetype)
augroup end

โครงกระดูกเริ่มต้นวางภายใต้เช่น:~/.vim/skeleton ,~/.vim/skeleton/vim~/.vim/skeleton/sh

วางโครงกระดูกเฉพาะโครงการbalabala/project/.vim/skeletonไว้ ตราบใดที่~/.vimปรากฏขึ้นก่อนที่ balabala/project/.vimใน:h rtp, balabala/project/skeleton/จะถูกใช้เป็นไดเรกทอรีโครงกระดูก

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