34

用 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>
4

8 回答 8

28

我的 .vimrc 中有这样的东西:

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

等等,无论你需要什么。

于 2008-10-02T14:40:34.167 回答
16

您可以将骨架/模板保存到文件中,例如 ~/vim/skeleton.xml

然后将以下内容添加到您的 .vimrc

augroup Xml
    au BufNewFile *.xml 0r ~/vim/skeleton.xml
augroup end
于 2008-10-02T14:46:13.200 回答
8

抱歉迟到了,但我觉得我这样做的方式可能对某些人有用。它使用文件的文件类型,使其比更传统的方法更短、更动态。它仅在 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
于 2011-08-31T23:55:52.107 回答
5

如果您想使您的骨架适应上下文或用户选择,请查看vim.wikia上列出的模板扩展插件

于 2008-10-02T15:00:22.463 回答
1

这里有两个使用 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
于 2008-10-02T14:38:34.687 回答
1

您可以在读取或创建文件时添加各种挂钩。到

:help event

并阅读那里的内容。你想要的是

:help BufNewFile
于 2008-10-02T14:39:03.420 回答
0

它也可以与 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 窗口并且很麻烦。

于 2014-11-13T13:40:58.660 回答
0

我为html写了一个插件:

关于 vim 脚本:http ://www.vim.org/scripts/script.php?script_id=4845

在 Github 上:https ://github.com/linuscl/vim-htmltemplate

于 2015-05-03T09:59:15.707 回答