如何在vim中自动包含C ++头文件?

时间:2011-06-20 19:18:50

标签: c++ vim

我经常想使用STL函数和容器,我发现自己必须手动添加:

#include <vector>
using std::vector;

到文件的开头。是否有人知道vim插件或命令行程序会自动执行此类操作?

7 个答案:

答案 0 :(得分:5)

可能,但我不推荐它。并且#include <vector>并不难打字。

也许您开始太多项目未完成或使用太多不同的文件?

最后,更多的是偏好,我更喜欢使用std::vector而不是vector,因为那时我确定我的意思,即标准向量。

您似乎是一名初学者,认为您可以使用using namespace std;&amp; co,但请相信我,你不要。 请不要将此视为冒犯,只是提示。

答案 1 :(得分:5)

首先需要编写一个.cpp文件,其中包含您通常需要的所有标题。

我看起来像这样,

#include<iostream>
#include<stdio.h>

using namespace std;

typedef long long int ll;

int main(void) {

return 0;
}

现在将此行添加到您的vimrc文件

autocmd BufNewFile *.cpp r /path/to/template.cpp

现在每次打开.cpp文件时,您都会拥有预先编写的所有内容。

答案 2 :(得分:4)

一旦你开始想从vim那里得到一些奇特的IDE行为,这是一场相当艰难的战斗,特别是一旦它需要代码解析。

你应该决定什么对你来说更重要,使用vim作为编辑,或者获得编码帮助。如果前者对你更重要,坚持使用vim;否则,请考虑使用EclipseNetBeans这样一个不错的IDE来命名。

NetBeans和Eclipse都有插件可以在某种程度上模拟vim。 NetBeans有:

  • jvi - 总体上支持很多vi功能,但是我用它进行的短暂测试(例如,有时它表示你处于正常模式,但是当你输入键时你意识到)你不是,你必须重新启动来解决它。)

Eclipse有:

  • vrapper - 整体非常可靠的实现,但是有很烦人的错误(当重构代码时,它有时会导致异常并且重构失败,到目前为止还没有找到解决方法。)这也是一个废弃的项目好像。
  • eclim - 允许你在vim中运行Eclipse的活动项目(它是一个vim插件,通过运行Eclipse作为服务器为vim添加一些Eclipse功能)或者它允许你在Eclipse中运行vim(但是你松了所有内置的Eclipse功能可能会破坏目的。)从使用它起,它工作得很好,但在向项目添加新文件和代码时开始变得毛茸茸,有时似乎没有正确地重新索引你的项目并且没有任何东西加载Eclipse并迫使Eclipse重新索引项目似乎工作。另外,作为一个注释,这个vim插件无法实现你想要的,因为它们没有实现Eclipse的这个功能
  • viplugin - 非常可靠的vim功能实现。免费试用但价格约20美元。维护者有零星的更新。试一试,看看你是否喜欢它。
  • viable - 用于在Eclipse中模拟vim功能的更实用的插件之一。在尝试了所有其他选项之后,我目前坚持在路径模式中使用这个选项,插件是付费(15美元),所以我每X个时间都会遇到恼人的弹出窗口。如果我继续使用它会更长时间,我会买它。

答案 3 :(得分:2)

在开始使用emacs之前,我曾经在.vimrc中使用以下四个键盘映射:

nmap _i I<C-m><Esc>kI#include ""<Esc>$i
imap <C-z>i <Esc>_i
nmap _I I<C-m><Esc>kI#include <><Esc>$i
imap <C-z><C-i> <Esc>_I

第一个, _ i 在命令模式下将#include ""插入上面的行,并在插入模式下将光标留在引号内。第二个是插入模式相同,但我不知道为什么我使用 CTRL-Z 作为命令前缀。第二对用于系统头。你使用 I 而不是 i 来获得那个。

我建议您使用可以在更多地方使用的内容而不是仅用于矢量的专用内容,但您可以轻松更改上面的内容以使用键盘地图插入所需的代码段。

答案 4 :(得分:2)

" the sixth line contains a model
augroup lang_cpp
    au!
    au BufNewFile,BufRead *.cpp set ft=cpp   
    au FileType cpp set omnifunc=omni#cpp#complete#Main
    au FileType cpp let OmniCpp_MayCompleteScope = 0 
    au BufNewFile *.cpp 0r ~/.vim/skel/cpp.skel
au    

答案 5 :(得分:1)

lh-cpp代码段可以自动包含所需的标头。例如,如果您在vect完成,则会看到std::vector<|>已展开,#include <vector>已添加(如果尚未添加)。

然而,在他看来,它无法看到<vector>已经包含在另一个包含的文件中。

答案 6 :(得分:0)

我发现3个vim插件自动包含c ++标头。

相关问题