如何在使用vim创建新文件时自动添加一些骨架代码

如何在使用vim创建新文件时自动添加一些骨架代码,vim,code-generation,Vim,Code Generation,在使用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>

在使用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>

这里有两个使用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
augroup-Xml
au BufNewFile*.xml:python导入vim
au-BufNewFile*.xml:python-vim.current.buffer[0:0]=['']
au BufNewFile*.xml:python del vim
螺旋端
傅s:inserttmlskeleton()
python导入vim
python vim.current.buffer[0:0]=[“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”]
python del vim
恩德福
augroup Html
au BufNewFile*.html调用InsertHtmlSkeleton()
螺旋端

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

:help event
读一读那里的内容。你想要的是

:help BufNewFile

我的.vimrc中有类似的内容:

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

依此类推,您需要什么都行。

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

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

augroup Xml
    au BufNewFile *.xml 0r ~/vim/skeleton.xml
augroup end

如果您想根据上下文或用户选择调整框架,请查看

上列出的template expander插件,抱歉这么晚了,但我觉得这种方法可能对某些人有用。它使用文件的文件类型,使其比传统方法更短、更动态。仅在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

它也可以与snipmate一起使用:

augroup文档
哎呀!
au BufNewFile*.py:调用ExecuteSnippet('docs'))
螺旋端
功能!ExecuteSnippet(名称)
执行“正常!我”。a:名字。“\=TriggerSnippet()\”
端功能
使用“docs”来触发代码段


它可以处理多个代码段,但随后会出现:messages窗口,这很麻烦。

我为html编写了一个插件:

在vim脚本上:


在Github上:

这里的
0r
是什么意思?@crison关于0r的含义。0将插入定位到第0行,r指示vim在插入位置读入文件内容。感谢您的解释。@orftz-我刚刚用您的filetype方法替换了我使用了很长时间的配置。干净多了。我发现在此之后列出文件类型很有用。在vim中,如果您执行
:echo glob($VIMRUNTIME./ftplugin/*.vim')
:echo glob($VIMRUNTIME./syntax/*.vim')
,它将列出vim知道的所有类型。