2010-06-02 3 views
2

Когда я создаю файл .tex с помощью Vim я получаю хороший шаблон от тогоКак автоматически создать файл makefile в том же каталоге, что и я создаю файл Latex?

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

в моей .vimrc. У меня также есть шаблон makefile в моем домашнем каталоге, но я должен вручную скопировать туда, где находится файл .tex. В среде Linux, как я могу автоматически копировать или автогенерировать make-файл одновременно с созданием файла .tex?

ответ

2

В переносном ответе не будет использоваться cp (который может перезаписать существующий make-файл), но функции readim() и writefile().

Чтобы запустить его, лучше всего было бы определить и выполнить функцию, которая загружает первый скелет, и создает файл сборки на лету:

" 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

Я отмечаю это как самый полный ответ. – Viktiglemma

2

Нормальная команда экс сделать это будет

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

Так что вам просто нужно добавить еще один autocmd (который будет выполняться после того, как первый)

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

(silent просто предотвращает копию команда выводится при выполнении).

+0

Я также ценю этот ответ, потому что она короткая и будет работать большую часть времени. Но несколько раз я создам два файла tex в одном каталоге, а затем make-файл будет перезаписан. – Viktiglemma

+0

@Viktiglemma: Я согласен, это действительная забота, что я не обращался. Однако его можно было бы исправить, изменив его на 'cp -n' (при условии, что вы находитесь в системе * nix). Любое истинное кроссплатформенное решение должно быть выполнено в vimscript, как это делает Люк. – rampion

+1

Это было очень близко к тому, что я придумал. Я бы предложил изменить 'cp' на' cp -i'. Таким образом вам будет предложено перезаписать существующий файл или нет. @rampion: '-n', похоже, не является допустимым вариантом для' cp' на Ubuntu 8.04 или Solaris 10. Кроме того, вы можете добавить '/ Makefile' в конец' autocmd', если вы хотите переименовать файл скелета. –

Смежные вопросы