Vim C++(Qt,C)开发强大插件

4

我想在开发中尝试使用vim(我使用Linux),但是有很多插件和大量的文档,所以很难找到我想要的插件。

我将使用:C++,Qt,C。因此,我需要从插件中获取以下内容:

1)代码自动补全

1.1)从标准库、第三方库和我的源代码中智能地完整补全(包括嵌套模板和包含文件)。弹出窗口应显示函数参数和结果,以便我可以看到重载函数。组织方式不要紧,但我需要告诉自动补全器我想要哪些库以及项目文件的位置。

1.2)只要我还没完成,自动补全器就必须显示帮助信息(函数模板)。我来解释一下:

foo.bar(a.firstArg(p1, p2), b.secondArg(p3, p4, p5))

当我键入foo.bar(时,我仍然希望看到关于foo.bar函数及其参数的帮助信息。 然后当我键入a.fir时,我想要使用tab选择并完成a.firstArg(,并显示关于a.firstArg函数和参数的新信息,直到我写完a.firstArg(p1, p2)。当我写完p1后,它应该自动完成,然后在我写完,之后再次显示有关a.firstArg的信息。所以我完成这个嵌套语句后,当我写,时,弹出窗口会再次显示有关foo.bar参数的信息。一直重复此过程,直到我完成这个语句。
因此,我希望始终能够看到有关未完成语句的所有信息,直到我完成这个语句。如果有几个重载函数,我希望能够选择要查看哪些信息。
1.3)拥有快速自动完成菜单和向前和向后选择的能力将是不错的。
2) 导航(这应该与自动完成器配对使用,因此它应该获取我提供给自动完成器的库和源文件的信息并用于导航):
2.1)转到光标下符号的声明。
2.2)在声明和定义之间切换。(或者转到定义)。
2.3)在foo.h和foo.cpp(foo.c)之间切换
2.4)返回多个跳转。(这样我就可以转到声明,然后转到定义,然后转到我在那里看到的某个函数的声明,然后切换到cpp文件,然后回到默认位置(可能是同样数量的跳转))。
3)代码生成:
3.1)创建带有_FOO_H_包含保护和#include "foo.h"foo.hfoo.c(pp) 3.2)对于在foo.h中声明的函数,我想要在foo.c(pp)中创建定义。而且所创建的定义的位置应该与头文件中的位置相同。而且如果我在foo.cpp中有一个声明并使用了这个函数,那么它应该在同一文件foo.cpp中创建定义。
3.3)应该很容易创建代码生成模板,以便我可以创建自己的模板来生成例如pimpl惯用法(代码应同时出现在头文件和源文件中)。例如:
当我在foo.h处于活动状态时,我写::pimpl Test,然后得到:
//foo.h
class Test{
public:
private:
  class Impl_;
  Impl_ *m_i;
};

//foo.cpp
class Test::Impl_{
public:
private:
}

我尝试了什么。

我发现了YouCompleteMe,但是我没有找到如何获得1.2)行为。此外,ycm服务器会崩溃,使用自己的libclang.so,所以我使用系统自带的clang。而且总是有一些混乱的消息,比如template not found(^N^P^U)。所以我不知道这是一个bug还是一个特性。无论如何,我尝试了clang_complete,但是也有类似的问题。对于代码生成,我找到了几个片段插件,但是我没有太研究它们,因为如果我找不到合适的代码完成和导航,那么使用vim就没有意义。

所以,如果有人能告诉我在哪里搜索......那就太好了。


你听起来想要一个集成开发环境(IDE),而不是一个文本编辑器。 - romainl
@romainl 实际上我只需要一个DE的一部分,几乎只是与文本相关的部分。我不需要自动构建设置或断点调试。我不需要保存项目状态或集成版本控制。我不需要GUI来设置编译选项,也不需要其他IDE的好处。我只需要智能文本分析和舒适的文本完成、导航和生成。其他所有的事情我都可以在编辑器外完成。 - JustAnotherCurious
1
尝试在[softwarerecs.se]上提问,但确保遵循他们的问题质量准则 - user456814
1
抱歉(我不能再在适当的地方回答了)。2.2. 我使用我的lh-cpp套件中的:GOTOIMPL(https://code.google.com/p/lh-vim/wiki/lhCpp)。2.3. 我使用alternate(自那时以来已经存在其他解决方案)。3. 我使用我的mu-template+lh-cpp分支。它还没有提供pimpl生成器(但很容易添加),但您将找到有关新文件的所有内容(正确的头文件生成;如果找到,foo.c(pp)将包括foo.h(pp...),甚至在正确的路径中包括文件-> #include“module/submodule/foo.h”,...) - Luc Hermitte
1个回答

2
请记住,即使有多个插件,Vim在其核心上仍然是一款通用的编辑器,并且无法真正与特定语言的专用IDE相竞争。
对于代码补全,目前似乎最受欢迎的是YouCompleteMe。如果您对配置有具体问题,最好使用适当的标签提出其他问题。
关于导航:
2.1 您应该安装ctags或cscope。
2.2 使用ctags的:tn:tp
2.3 寻找a.vim。
2.4 有一个跳转列表,您可以使用CTRLI/CTRLO向前/向后跳转。请查看:help jump。您也可以使用标记:help mark
对于通用导航(非基于代码),我还建议使用Ctrl-P
关于代码生成:
您可以使用Snipmate(插件)的混合使用方式,它相当可扩展,也可以使用自己的宏(使用abbr等)。
Vim实际上是关于配置/开发自己的解决方案,而不是获取安装了所有内容的完整软件包。
总的来说,作为一名经常使用Vim的用户,我认为大部分时间Vim的代码补全、生成、重构部分都不如专用IDE。我曾经使用Eclim一段时间,现在基本上根据当前的工作情况在Vim和IDE之间切换(如果可能的话使用Vim模式)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接