2010-06-02 7 views
2

Lorsque je crée un fichier .tex en utilisant vim je reçois un modèle agréable d'avoirComment créer automatiquement un makefile dans le même répertoire que je crée un fichier Latex?

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

dans mon .vimrc. J'ai aussi un makefile-template dans mon répertoire personnel, mais celui-ci doit être copié manuellement là où se trouve le fichier .tex. Dans un environnement Linux, comment puis-je copier automatiquement ou générer automatiquement le fichier makefile en même temps que je crée un fichier .tex?

Répondre

2

La réponse portable n'utilisera pas cp (qui peut remplacer un fichier Make préexistant) mais les fonctions vim readfile() et writefile().

Pour déclencher, la meilleure chose serait de définir et d'exécuter une fonction qui charge le premier squelette, et crée le Makefile à la volée:

" 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 
+0

Je marque ceci comme la réponse la plus complète. – Viktiglemma

2

La commande normale ex pour ce faire serait

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

Vous avez juste besoin d'ajouter un autre autocmd (qui exécutera après la première)

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

(le silent empêche simplement la copie commande d'être imprimé lors de l'exécution).

+0

J'apprécie également cette réponse parce qu'il est court et la volonté travailler la plupart du temps. Pourtant, parfois, je vais créer deux fichiers tex dans le même répertoire, puis le makefile sera écrasé. – Viktiglemma

+0

@Viktiglemma: Je suis d'accord, c'est une préoccupation valide que je n'ai pas abordée. Cependant, il pourrait être corrigé en le changeant en 'cp -n' (en supposant que vous soyez sur un système * nix). Toute vraie solution multiplateforme devrait être faite dans vimscript, comme le fait Luc. – rampion

+1

C'était très proche de ce que j'ai trouvé. Je suggère de changer 'cp' en' cp -i'. De cette façon, vous serez invité si vous voulez écraser le fichier existant ou non. @rampion: '-n' ne semble pas être une option valide pour' cp' sur Ubuntu 8.04 ou Solaris 10. Aussi, vous pouvez ajouter '/ Makefile' à la fin de' autocmd' si vous voulez renommer le fichier squelette. –