Как я могу автоматически добавить скелетный код при создании нового файла с помощью vim - PullRequest
34 голосов
/ 02 октября 2008

При создании нового файла с помощью vim я хотел бы автоматически добавить скелетный код.

Например, при создании нового XML-файла я хотел бы добавить первую строку:

  <?xml version="1.0"?>

Или при создании html-файла я хотел бы добавить:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title></title>
  </head>
  <body>
  </body>
</html>

Ответы [ 8 ]

28 голосов
/ 02 октября 2008

Я получил что-то подобное в моем .vimrc:

au BufNewFile *.xml 0r ~/.vim/xml.skel | let IndentStyle = "xml"
au BufNewFile *.html 0r ~/.vim/html.skel | let IndentStyle = "html"

И так далее, все, что вам нужно.

15 голосов
/ 02 октября 2008

Вы можете сохранить свой скелет / шаблон в файл, например ~ / vim / skeleton.xml

Затем добавьте следующее к вашему .vimrc

augroup Xml
    au BufNewFile *.xml 0r ~/vim/skeleton.xml
augroup end
7 голосов
/ 01 сентября 2011

Извините за опоздание, но я чувствую, как я делаю это может быть полезно для некоторых. Он использует тип файла, что делает его короче и динамичнее, чем обычные методы. Тестировался только на Vim 7.3.

if has("win32") || has ('win64')
    let $VIMHOME = $HOME."/vimfiles/"
else
    let $VIMHOME = $HOME."/.vim/"
endif

" add templates in templates/ using filetype as file name
au BufNewFile * :silent! exec ":0r ".$VIMHOME."templates/".&ft
5 голосов
/ 02 октября 2008

Если вы хотите адаптировать свой скелет к контексту или к выбору пользователя, взгляните на плагины шаблона-расширителя, перечисленные в vim.wikia

1 голос
/ 02 октября 2008

Вы можете добавлять различные хуки, когда файлы читаются или создаются. до

:help event

и прочитайте, что там. То, что вы хотите, это

:help BufNewFile
1 голос
/ 02 октября 2008

Вот два примера использования сценариев Python.

Добавьте что-то подобное в ваш .vimrc или другой файл, созданный вашим .vimrc:

augroup Xml
  au BufNewFile *.xml :python import vim
  au BufNewFile *.xml :python vim.current.buffer[0:0] = ['<?xml version="1.0"?>']
  au BufNewFile *.xml :python del vim
augroup END

fu s:InsertHtmlSkeleton()
  python import vim
  python vim.current.buffer[0:0] = ['<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', "<html>", "<head>", "  <title></title>", "</head>", "<body>", "", "</body>", "</html>"]
  python del vim
endfu

augroup Html
  au BufNewFile *.html call <SID>InsertHtmlSkeleton()
augroup END
0 голосов
/ 03 мая 2015

Я написал плагин для HTML:

На скриптах vim: http://www.vim.org/scripts/script.php?script_id=4845

На Github: https://github.com/linuscl/vim-htmltemplate

0 голосов
/ 13 ноября 2014

Может работать и с snipmate:

augroup documentation
    au!
    au BufNewFile *.py :call ExecuteSnippet('docs')
augroup END

function! ExecuteSnippet(name)
    execute "normal! i" . a:name . "\<c-r>=TriggerSnippet()\<cr>"
endfunction

с «документами» для запуска фрагмента.

Он работает с несколькими фрагментами, но затем появляется окно: messages, и оно становится громоздким.

...