Как автоматически создать make-файл в том же каталоге, в котором я создаю файл Latex?

Когда я создаю файл .tex с помощью vim, я получаю хороший шаблон из

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

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


person Viktiglemma    schedule 02.06.2010    source источник


Ответы (2)


Переносимый ответ не будет использовать cp (который может перезаписать уже существующий make-файл), а будет использовать функции 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

Обычная команда ex для этого будет

:!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-файла в одном и том же каталоге, а затем make-файл перезаписывается. - person Viktiglemma; 03.06.2010
comment
@Viktiglemma: Я согласен, это серьезная проблема, на которую я не обращал внимания. Однако это можно исправить, изменив его на cp -n (при условии, что вы работаете в системе *nix). Любое настоящее кроссплатформенное решение должно быть реализовано в vimscript, как это делает Люк. - 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