如何在vim中使用模板

问题描述 投票:0回答:7

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

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

我解释

:help template

我应该将其放置在我的 vimrc 中

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

运行 R 脚本显示可能会发生某些事情,但显然没有:

--- Auto-Commands ---

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

抱歉,如果这个问题是令人难以置信的愚蠢;-/

r vim
7个回答
31
投票

您建议的命令不起作用:这会在您每次打开时不运行 Vim 命令

~/.vim/skeleton.R

实现你想要的效果的一个粗略方法是使用:

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

每当创建新的

:r
文件时,都会读取 (
*.R
) 您的文件。 您希望避免在 autocmd 中出现
BufRead
,否则每次您打开文件时它都会将骨架文件读入您的工作文件!

有许多插件可以为此过程添加更多控制。 作为作者,因此完全有偏见,我推荐这个,但是这里列出了很多其他的。


无耻插件:

它们的工作方式都相对相似,但解释一下我的脚本:

您按照linked页面上的说明安装插件,然后在

~/.vim/templates
中创建一些模板。 这些模板应与“目标”文件具有相同的扩展名,因此,如果它是
.R
文件的模板,请将其命名为
skeleton.R
之类的名称。 在您的
.vimrc
中,添加如下内容:

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

然后创建新的

.R
文件(带有文件名,如果是新的请保存它)并输入:

:LoadFileTemplate

您也可以跳过

.vimrc
编辑,只需执行:

:LoadFileTemplate skeleton

请参阅网站了解更多详情。


10
投票

假设你的骨架在你的 ~/.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

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


8
投票

在您的 ~/.vim 文件夹中创建一个

templates
子目录

$ mkdir -p ~/.vim/templates

在名为 R.骨骼 的子目录中创建一个新文件,并放入标头和/或您想要在创建新的“.R”文件时自动加载的其他内容。

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

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

~/.vimrc
文件中,该文件可能已由“访客”以某种方式建议

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

查看我的 github 存储库,了解更多详细信息和其他选项。


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()

抱歉说太多了, 编码太棒了! :)


2
投票

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

我使用它并为它贡献了一些补丁,并且认为它的功能相对完整。


1
投票

存在许多模板文件扩展器——您还会发现有关如何实现基本模板文件扩展器的说明。

就我而言,我正在维护 muTemplate 的分支。首先,只需将

{ft}.template
文件放入
{rtp}/template/
即可。如果您想使用任何 (viml) 变量或表达式,就这样做。如果您愿意,您甚至可以将 vim 代码(现在甚至是函数)放入模板文件中。一些明智的决策已经针对 C++ 和 vim 文件实施。


1
投票

使用snipmate插件怎么样?请参阅此处

© www.soinside.com 2019 - 2024. All rights reserved.