如何使用模板在vim

eyh26e7m  于 2022-11-11  发布在  其他
关注(0)|答案(7)|浏览(158)

这确实是一个新手问题-但基本上,我如何为某些文件类型启用模板。
基本上,我只是希望模板插入一个排序的标题,这是与一些我觉得有用的函数,和库加载等。
我翻译

:help template

我应该把这个放在我的vimrc里

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

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

--- Auto-Commands ---

这可能是因为模板是由命令组成的(而skeleton.R中没有这样的命令)--在本例中,我只希望它插入一个文本标题(skelton.R由它组成)。
抱歉,如果这个问题是令人难以置信的愚蠢;-/

kyks70gy

kyks70gy1#

您建议的命令不起作用:这样做目的是在每次打开~/.vim/skeleton.R时都运行no 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

3ks5zfa0

3ks5zfa02#

假设您的 backbone 位于~/.vim/templates/目录中,您可以将此代码片段放在vimrc文件中。

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

一些解释,

  • BufNewFile . =每次编辑一个新文件
  • silent!execute =无提示执行,失败时无错误消息
  • 0 r =读取文件并在新文件的顶部(0)插入内容
  • expand(“:e”)=获取当前文件名的扩展名

另请参阅http://vim.wikia.com/wiki/Use_eval_to_create_dynamic_templates

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

vxbzzdmp3#

~/.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以了解更多详细信息和其他选项。

ndh0cuux

ndh0cuux4#

这只是一个技巧,我曾经使用.它的便宜,但如果你是不是知道什么vim和它的命令,它很容易处理.使一个目录像这样:

~/.vim/templates/barney.cpp

然后在位于~/.vimrc的.vimrc文件末尾添加一个类似ForUncleBarney()的函数,应该如下所示:

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

那么就在vim中使用这个命令

:call ForBarneyStinson()

然后您会看到您的模板作为示例我已经有两个.cpp文件的模板

:call ForBarney()
:call ACM()

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

fafcakar

fafcakar5#

另外,请看一下https://github.com/aperezdc/vim-template.git
我使用它,并贡献了一些补丁,它会争辩说,它的功能相对齐全。

bcs8qyzn

bcs8qyzn6#

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

llycmphe

llycmphe7#

存在许多template-file expanders--您还可以在其中找到有关如何实现基本模板文件扩展器的说明。
对于我来说,我正在维护muTemplate的fork。为了简单起见,只需将一个{ft}.template文件放入{rtp}/template/中。如果您想使用任何(vml)变量或表达式,就这样做吧。如果您愿意,您甚至可以将vim代码(现在甚至是函数)放入模板文件中。已经为C++和vim文件实现了几个明智的决定。

相关问题