【问题标题】:How to use a template in vim如何在 vim 中使用模板
【发布时间】:2018-11-12 11:31:53
【问题描述】:

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

基本上,我只是希望模板插入各种标题,即包含一些我认为有用的功能,以及加载的库等。

我解释

:help templates

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

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

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

--- Auto-Commands ---

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

对不起,如果这个问题令人难以置信的愚蠢;-/

【问题讨论】:

  • 是我自己还是每次创建新文件时模板前都加了一个空行?无论如何要摆脱换行符?

标签: r vim


【解决方案1】:

您建议的命令不起作用:它的作用是在您打开 ~/.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

【讨论】:

  • Beauti-forking-full - 非常好的答案 - 引导我完成这些步骤。非常感谢。目前,粗略的方法适用于我的预期,但我已经下载了扩展程序,并将看看我如何使用它:-) - 谢谢。
  • 使用0r 代替r 并且插入不会在空行中添加。
【解决方案2】:

假设你的骨架在你的 ~/.vim/templates/ 目录下,你可以把这个 在你的 vimrc 文件中添加 sn-p。

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

一些解释,

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

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

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

【讨论】:

    【解决方案3】:

    在您的 ~/.vim 文件夹中创建一个 templates 子目录

    $ mkdir -p ~/.vim/templates
    

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

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

    然后,将以下内容添加到您的 ~/.vimrc 文件中,可能“客人”以某种方式提出了建议

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

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

    【讨论】:

      【解决方案4】:

      这只是我曾经使用的一个技巧。 它很便宜,但是如果您对 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()
      

      不好意思说多了 编码真棒! :)

      【讨论】:

        【解决方案5】:

        也可以看看https://github.com/aperezdc/vim-template.git

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

        【讨论】:

          【解决方案6】:

          使用 snipmate 插件怎么样?见here

          【讨论】:

            【解决方案7】:

            存在许多template-file expanders - 您还可以在其中找到有关如何实现基本模板文件扩展器的说明。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-09-07
              • 2018-08-29
              • 2019-05-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多