Vim使用模板创建文件

时间:2014-03-30 23:24:43

标签: vim

我倾向于依赖vim而不是完整的IDE来处理项目,我发现自己定期做的一件事就是创建一个带有派生值的新文件。

例如,创建新的c ++类涉及创建.hpp文件和.cpp文件,添加文件注释,许可证,作者,ctor / dtor,复制,分配,移动等...

.HPP

class %Object% {

public:

    explicit %Object%() = default;
    ~%Object%() = default;

    %Object%(%Object%&& rhs) = default;
    %Object%(const %Object%& rhs) = default;
    %Object%& operator=(%Object%&& rhs) = default;
    %Object%& operator=(const %Object%& rhs) = default;

protected:

private:

}

的.cpp

#include "%Object%.hpp"

另一个例子是c。

中的.h.c文件

我对UltiSnipsmuTemplate有点熟悉,这两者似乎都在很大程度上削减了样板。但是,我不清楚是否有办法在文件范围之外使用这些或其他东西。我写了一个非常快速和肮脏的bash scripts来做这件事,我准备在python中重新实现它,但我宁愿使用现有的插件。

有没有办法用UltiSnips,muTemplate或其他方法做到这一点?如果没有,是否有一种扩展现有插件的好方法?

2 个答案:

答案 0 :(得分:1)

Discl。我是mu-template和lh-cpp的维护者。不幸的是,我现在只是看到你的问题 - 我会说你不应该犹豫要不要给我发电子邮件/问题/ ......我不确定问题是否仍然存在。我甚至不确定是否已经完全掌握了你想要的东西。

自您尝试过的版本以来,我在lh-cpp中添加了许多模板/片段/向导来生成classes according to their semantics。你现在可以:

  • 展开value-classbase-class
  • 之类的内容
  • 或调用函数以展开相同的向导/片段/模板并为其提供参数。例如,使用类似指针的参数扩展值类将触发复制构造函数和赋值运算符的生成(否则,它们将默认,显式或隐式地取决于选项和检测到的C ++风格(C ++ 98 / 03,C ++ 11或更多 - rule of all or nothing仍然需要强制执行。。目前这种方法不是很符合人体工程学。我必须找到一种方法来简化这项任务。你可以找到使用的例子在test/spec directory of lh-cpp

请注意,C ++文件的c ++模板也可以高度自定义 - 基于每个项目。 Usual licence texts已准备就绪。新的C ++文件知道如何包含其关联的头文件(如果检测到)。

答案 1 :(得分:0)

将其添加到您的某个启动文件中:

" Function to substitute the class names in a file
function! SubstituteClassName()
   execute "1,$s/%Object%/" . expand("%:t:r") . "/g"
endfunction

" Function to create the skeleton of a header file
function! CreateHeaderFile()
  1
  insert
#pragma once
#ifndef %Object%_H
#define %Object%_H

class %Object% {

public:

    explicit %Object%() = default;
    ~%Object%() = default;

    %Object%(%Object%&& rhs) = default;
    %Object%(const %Object%& rhs) = default;
    %Object%& operator=(%Object%&& rhs) = default;
    %Object%& operator=(const %Object%& rhs) = default;

protected:

private:

}
.
  call SubstituteClassName()
endfunction

" Function to create the skeleton of a source file
function! CreateSourceFile()
  1
  insert
#include "%Object%.hpp"
.
  call SubstituteClassName()
endfunction

function! CreateClassFiles(name)

  " Open the header file.
  execute "edit " . a:name . ".hpp"
  " Create the skeleton of the header file
  call CreateHeaderFile()
  " Write the file
  wa

  " Open the source file.
  execute "edit " . a:name . ".cpp"
  " Create the skeleton of the header file
  call CreateSourceFile()
  " Write the file
  wa

endfunction

现在您可以使用

创建骨架.hpp和.cpp文件
call CreateClassFiles("myclassname")