如何在vim中使用模板

时间:2010-09-24 08:18:28

标签: r vim

这确实是一个新手问题 - 但基本上,我如何为某些文件类型启用模板。

基本上,我只是希望模板插入一个类别的标题,即一些我认为有用的函数,以及加载的库等。

我解释

:help templates

我应该把它放在我的vimrc中的方式

au BufNewFile,BufRead ~/.vim/skeleton.R

运行R脚本然后显示可能发生的事情,但显然不会:

--- Auto-Commands ---

这可能是因为模板由命令组成(并且在skeleton.R中没有这样的命令) - 在这种情况下,我只是希望它插入一个文本标题(由skelton.R组成)。

很抱歉,如果这个问题让人头疼,那就愚蠢了! - /

7 个答案:

答案 0 :(得分:26)

您建议的命令不起作用:无论何时打开~/.vim/skeleton.R

,这样做都不会运行Vim命令

实现你想要的东西的粗略方法是使用:

:au BufNewFile *.R r ~/.vim/skeleton.R

每当创建新的:r文件时,这将读取(*.R)您的文件。您希望避免在autocmd中使用BufRead,或者每次打开文件时它都会将骨架文件读入您​​的工作文件中!

有许多插件可以为此过程添加更多控件。作为作者,因此完全有偏见,我建议this one,但还有很多其他人列出here


无耻插头:

他们都以相对类似的方式工作,但要解释我的剧本:

按照linked页面上的说明安装插件,然后在~/.vim/templates中创建一些模板。这些模板应与“目标”文件具有相同的扩展名,因此如果它是.R文件的模板,请将其命名为skeleton.R。在.vimrc中添加以下内容:

let g:file_template_default = {}
let g:file_template_default['R'] = 'skeleton'

然后创建新的.R文件(带有文件名,如果是新的则保存)并输入:

:LoadFileTemplate

您也可以跳过.vimrc编辑,然后执行:

:LoadFileTemplate skeleton

有关详细信息,请参阅the website

答案 1 :(得分:9)

假设您的骨架在〜/ .vim / templates /目录中,您可以将其放入 你的vimrc文件中的代码段。

augroup templates
  au!
  " read in templates files
  autocmd BufNewFile *.* silent! execute '0r ~/.vim/templates/skeleton.'.expand("<afile>:e")
augroup END

一些解释,

  • BufNewFile =每次我们编辑新文件
  • 无声!执行=静默执行,如果失败则没有错误消息
  • 0r =读取文件并在新文件的顶部(0)插入内容
  • expand(“:e”)=获取当前文件名的扩展名

另见http://vim.wikia.com/wiki/Use_eval_to_create_dynamic_templates

*修复了文件路径中缺少的点

答案 2 :(得分:6)

~/.vim文件夹

中创建 templates 子目录
$ mkdir -p ~/.vim/templates

在名为 R.skeleton 的子目录中创建一个新文件,并在创建新的“ .R ”时添加要自动加载的标题和/或其他内容文件。

$ vim ~/.vim/templates/R.skeleton

然后,将以下内容添加到您的~/.vimrc文件中,可能以“guest”的方式建议

autocmd BufNewFile * silent! 0r $HOME/.vim/templates/%:e.skeleton

请查看my github repository了解更多详情和其他选项。

答案 3 :(得分:2)

这只是我以前使用过的技巧。 它很便宜,但如果你对vim一无所知,它的命令很容易处理。 制作一个这样的目录:

~/.vim/templates/barney.cpp

并且你知道barney.cpp应该是你的模板代码。 然后将ForUncleBarney()之类的函数添加到位于~/.vimrc的.vimrc文件的末尾 它应该像

function ForBarneyStinson()
   :read ~/.vim/templates/barney.cpp
endfunction

然后在vim中使用此命令

:call ForBarneyStinson()

然后你会看到你的模板 作为一个例子,我已经有两个.cpp文件模板

:call ForBarney()
:call ACM()
对不起说了太多, 编码太棒了! :)

答案 4 :(得分:2)

另请查看https://github.com/aperezdc/vim-template.git

我使用它并为它提供了一些补丁,并认为它的功能相对较全。

答案 5 :(得分:1)

有很多template-file expanders - 你也会找到关于如何实现基本模板文件扩展器的解释。

就我而言,我正在维持muTemplate的分支。要获得简单的开始,只需将{ft}.template文件放入{rtp}/template/即可。如果你想使用任何(viml)变量或表达式,那就做。如果您愿意,甚至可以将vim代码(现在甚至是函数)放入模板文件中。已经为C ++和vim文件实现了几个聪明的决定。

答案 6 :(得分:1)

使用snipmate插件怎么样?见here