C++ 如何自动包含C++;vim中的标题?

C++ 如何自动包含C++;vim中的标题?,c++,vim,C++,Vim,通常我想使用STL函数和容器,我发现自己必须手动添加: #include <vector> using std::vector; #包括 使用std::vector; 到文件的开头。有人知道会自动执行这类操作的vim插件或命令行程序吗?可能,但我不推荐。而且,#include一点也不难输入 也许你开始了太多没有完成的项目,或者使用了太多不同的文件 最后,我更喜欢使用std::vector而不是vector,因为这样我就可以确定我的意思,即标准向量 您似乎是一个初学者,认为使用名称

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

#include <vector>
using std::vector;
#包括
使用std::vector;

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

可能,但我不推荐。而且,
#include
一点也不难输入

也许你开始了太多没有完成的项目,或者使用了太多不同的文件

最后,我更喜欢使用
std::vector
而不是
vector
,因为这样我就可以确定我的意思,即标准向量


您似乎是一个初学者,认为使用
名称空间std可以节省时间
&co,但相信我,你不会的。
请不要把这当作冒犯,只是一个提示。

一旦你开始想从vim获得一些奇特的IDE行为,特别是当它需要代码解析时,这将是一场相当艰苦的战斗

您应该决定什么对您更重要,使用vim作为编辑器,或者获得编码帮助。如果前者对你更重要,那么坚持使用vim;否则,考虑得到一个像样的IDE,例如,或者说几个。p> NetBeans和Eclipse都有在某种程度上模拟vim的插件。 NetBeans有:

  • -总体上支持很多vi功能,但从我用它做的简短测试来看,它有很多缺陷(例如,有时它说你处于正常模式,但当你键入密钥时,你意识到你没有,你必须重新启动才能修复它。)
Eclipse有:

  • -总体而言,实现相当可靠,但存在令人讨厌的bug(当重构代码时,有时会导致异常和重构失败,到目前为止还没有找到解决方法。)它似乎也是一个被放弃的项目
  • -活动项目,允许您在vim中运行Eclipse(它是一个vim插件,通过将Eclipse作为服务器运行,向vim添加了一些Eclipse功能),或者允许您在Eclipse中运行vim(但随后您失去了所有可能无法达到目的的内置Eclipse功能)。通过使用它,它工作得非常好,但在向项目添加新文件和代码时,它开始变得棘手,有时它似乎无法正确地重新编制项目的索引,除非加载Eclipse并强制Eclipse重新编制项目的索引,否则一切都会正常进行。另外,值得注意的是,这个vim插件无法实现您想要的功能,因为他们没有实现Eclipse的这一功能
  • -vim功能的实现相当可靠。免费试用,但费用约为20美元。维护人员有零星的更新。试试看你是否喜欢
  • -用于在Eclipse中模拟vim功能的更可靠的插件之一。在尝试了所有其他选项后,我现在坚持在trail模式下使用这个插件,插件是pay($15),所以我每隔X个时间就会看到恼人的弹出窗口。如果我继续使用的话,我会买的

在开始使用emacs之前,我曾在my.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
nmap_i IkI#包括“$i”
imap i_i
nmap(包括$I)
imap_I
第一个是命令模式下的_i,它在上面一行插入
#include”“
,并在插入模式下将光标保留在引号内。第二个与插入模式相同,但我不知道为什么使用CTRL-Z作为命令前缀。第二对用于系统头。你用我而不是我来得到那个


我建议您使用一些可以在更多地方使用的工具,而不是仅用于向量的专用工具,但是您可以轻松地更改上面的工具,以获得插入所需代码段的键盘映射。

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

" 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    
我的看起来像这样

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

using namespace std;

typedef long long int ll;

int main(void) {

return 0;
}

现在,每次打开.CPP文件,都会有你需要的一切预先编写。

< P>我已经找到3个VIM插件,自动包含C++头。
代码段可以自动包含所需的标题。例如,如果您在
vect
上完成,您将看到
std::vector
展开,如果尚未包含,则添加了
#include


然而,在他看来,
并没有包含在另一个包含的文件中。

维护一个包含的模板,以及您认为对程序有用的其他函数。在bash中编写一个小脚本,以便在创建新文件时复制模板表示他是初学者。。。。你可能有很多理由想使用它,而在牺牲可读性的同时节省打字时间是完全合法的…@ldog:我强烈不同意你的看法<代码>使用名称空间std有许多后果,其中有一些是需要的。我的经验法则是:在接口中,永远不要使用
使用命名空间X
作为您对接口用户的强制,这可能是他们所不期望的,但在实现文件中,只有您需要知道如何使用命名空间才可以。我在命名空间中只包含我将要使用的名称。就像在这种情况下的std::vector。我发现阅读要好得多,特别是在使用迭代器和传递多个STL参数时。出于明显的原因,我不在头文件上使用它,只在.cc文件上使用它。不管怎样,这不是重点。我不想改变我的编程方式,只想让它更容易导入我需要的东西。顺便说一句,对于STL迭代器,您可以在C++中使用auto now。谢谢您的输入。我一直在使用vim,因为我发现vim作为编辑器比IDE的其他部分更重要。我使用了jvi和eclim。我更喜欢jvi而不是eclim,尽管它仍然缺乏重要的特性。我最怀念的那些ide的特性是autoinclude(实际上我在java、ne中使用过它)
autocmd BufNewFile *.cpp r /path/to/template.cpp