จะสร้าง makefile อัตโนมัติในไดเร็กทอรีเดียวกับที่ฉันสร้างไฟล์ Latex ได้อย่างไร

เมื่อฉันสร้างไฟล์ .tex โดยใช้ vim ฉันจะได้รับเทมเพลตที่ดีจากการมี

autocmd BufNewFile *.tex 0r $HOME/.vim/templates/skeleton.tex

ใน .vimrc ของฉัน ฉันยังมี makefile-template ในโฮมไดเร็กตอรี่ของฉันด้วย แต่อันนี้ฉันต้องคัดลอกไปยังตำแหน่งที่มีไฟล์ .tex ด้วยตนเอง ในสภาพแวดล้อม Linux ฉันจะคัดลอกอัตโนมัติหรือสร้าง makefile อัตโนมัติพร้อมกับสร้างไฟล์ .tex ได้อย่างไร


person Viktiglemma    schedule 02.06.2010    source แหล่งที่มา


คำตอบ (2)


คำตอบแบบพกพาจะไม่ใช้ cp (ซึ่งอาจเขียนทับ makefile ที่มีอยู่แล้ว) แต่ฟังก์ชัน vim readfile() และ writefile()

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

" untested code
"
function! s:NewTeXPlusMakefile()
  let where = expand('%:p:h')
  " see mu-template's fork for a more advanced way to find template-files
  let skeletons_path = globpath(&rtp, 'templates')

  " the current .tex file
  let lines = readfile(skeletons_path.'/skeleton.tex')
  call setline(1, lines)

  " the Makefile, that MUST not be overwritten when it already exists!
  let makefile = where.'/Makefile'
  if ! filereadable(makefile)
    let lines = readfile(skeletons_path.'/skeleton.makefile')
    call writefile(lines, makefile )
  endif
endfunction

augroup LaTeXTemplates
  au!
  au BufNewFile *.tex call s:NewTeXPlusMakefile()
augroup END
person Luc Hermitte    schedule 02.06.2010
comment
ฉันตั้งค่าสถานะนี่เป็นคำตอบที่สมบูรณ์ที่สุด - person Viktiglemma; 03.06.2010

คำสั่งอดีตปกติในการทำเช่นนี้จะเป็น

:!cp $HOME/.vim/templates/skeleton.makefile %:p:h

ดังนั้นคุณเพียงแค่ต้องเพิ่ม autocmd อีกอัน (ซึ่งจะดำเนินการหลังจากอันแรก)

autocmd BufNewFile *.tex silent !cp $HOME/.vim/templates/skeleton.makefile %:p:h

(silent เพียงป้องกันไม่ให้คำสั่งคัดลอกถูกพิมพ์ขณะดำเนินการ)

person rampion    schedule 02.06.2010
comment
ฉันขอขอบคุณคำตอบนี้ด้วยเพราะมันสั้นและจะใช้ได้ผลเกือบตลอดเวลา แต่บางครั้งฉันจะสร้างไฟล์ tex สองไฟล์ในไดเร็กทอรีเดียวกัน จากนั้น makefile จะถูกเขียนทับ - person Viktiglemma; 03.06.2010
comment
@Viktiglemma: ฉันเห็นด้วย นั่นเป็นข้อกังวลที่ถูกต้องที่ฉันไม่ได้พูดถึง อย่างไรก็ตาม สามารถแก้ไขได้โดยเปลี่ยนเป็น cp -n (สมมติว่าคุณใช้ระบบ *nix) โซลูชันข้ามแพลตฟอร์มที่แท้จริงควรทำใน vimscript เช่นเดียวกับที่ Luc ทำ - person rampion; 03.06.2010
comment
นี่ใกล้เคียงกับสิ่งที่ฉันคิดไว้มาก ฉันขอแนะนำให้เปลี่ยน cp เป็น cp -i ด้วยวิธีนี้คุณจะได้รับแจ้งว่าคุณต้องการเขียนทับไฟล์ที่มีอยู่หรือไม่ @rampion: -n ดูเหมือนจะไม่ใช่ตัวเลือกที่ถูกต้องสำหรับ cp บน Ubuntu 8.04 หรือ Solaris 10 นอกจากนี้คุณอาจต้องการเพิ่ม /Makefile ต่อท้าย autocmd หากคุณต้องการเปลี่ยนชื่อไฟล์โครงกระดูก - person Curt Nelson; 03.06.2010