如何在创建Latex文件的同一目录中自动创建一个makefile?

时间:2010-06-02 09:30:53

标签: linux vim makefile

当我使用vim创建一个.tex文件时,我得到一个很好的模板

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

在我的.vimrc中。我的主目录中也有一个makefile-template,但是这个我必须手动复制到.tex文件所在的位置。在Linux环境中,如何在创建.tex文件的同时自动复制或自动生成makefile?

2 个答案:

答案 0 :(得分:2)

执行此操作的正常ex命令将是

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

所以你只需要添加另一个autocmd(将在第一个之后执行)

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

silent只是阻止执行时打印复制命令。

答案 1 :(得分: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