C ++ vim IDE。你需要的东西

时间:2009-03-08 13:50:18

标签: c++ vim ide

我打算创建C ++ IDE Vim 可扩展插件。制作满足我自己需求的产品并不是问题。

这个插件可以用于工作区,项目及其依赖项 这适用于unix like system, gcc 作为c ++编译器。

所以我的问题是IDE需要哪些最重要的东西?请注意这是Vim,几乎所有的几乎都是可能的。

几个问题:
您经常使用其中的项目管理不同的工作区以及它们之间的关系吗?这个过程中最烦人的事情是什么 是否有必要从Makefile重新创建“项目”?
感谢。

创建此插件的原因:

通过一堆插件和自编的插件,我们可以模拟大部分内容。当我们开展一个大型的“不定式”项目时,这是可以的 当我们已经有一个makefile或jam文件时很好。当我们必须创建我们的所有者时很糟糕,主要是通过复制和粘贴现有 所有ctags和cscope相关的东西都必须知道真实项目文件的列表。我们创造了这样的。这< project#get_list_of_files()>许多类似的可能是一个很好的项目api功能,以配合现有和未来的插件。 与现有makefile的合作有助于找出真实项目文件和可执行文件名称的列表。 插件内部有插件系统,可以有不同的项目模板。

以上是我开始工作的一些原因。我想听你的。

6 个答案:

答案 0 :(得分:12)

有很多问题。其中大多数已经通过独立的通用插件解决了。

关于什么是项目的定义。

给定同一目录中的一组文件,每个文件可以是项目的唯一文件 - 我总是有一个测试/目录,我托管宠物项目,或者我测试编译器的行为。相反,来自一组目录的文件可以是同一个非常大的项目的一部分。

最后,真正定义项目的是(叶子)“makefile” - 为什么要限制自己制作文件,scons,autotools,ant,(b)jam,aap怎么样?还有BTW,Sun-Makefiles或GNU-Makefiles?

此外,我认为让vim知道当前项目中的确切文件没有任何意义。即便如此,众所周知的project.vim plugin已经完成了这项工作。我个人使用local_vimrc plugin(我正在维护一个,我在SF上看过另外两个人)。有了这个插件,我只需要将一个_vimrc_local.vim文件放在一个目录中,其中定义的内容(:mappings,:functions,variables,:commands,:settings,...)将应用于下面的每个文件。目录 - 我在一个有十几个子组件的大项目上工作,每个组件都在自己的目录中,有自己的makefile(甚至没有名为Makefile,也没有目录的名称)

关于C ++代码理解

每当我们想要做一些复杂的事情时(重构例如重命名 - 函数,重命名变量,生成 - 切换 - 来自当前变量 - 这是一个真实的......),我们需要vim来拥有对C ++的理解。大多数现有插件都依赖于ctags。不幸的是,ctags对C ++的理解非常有限 - 我已经编写了few advanced things,但我常常被ctags提供的不良信息所阻止。 cscope并不是更好。最终,我认为我们必须集成一个先进的工具,如elsa / pork / ionk / deshydrata /....

注意:那就是现在,我集中了大部分精力。

关于Doxygen

我不知道跳转到与当前令牌相关联的doxygen定义有多困难。第一个难点是要了解光标的位置(我猜omnicppcomplete已经在这方面做了很多工作)。第二个困难是要了解doxygen如何从代码中为每个符号生成页面名称。

使用greasemonkey插件在doxygen页面的右侧代码中打开vim应该很简单。

关于调试器

对于那些在linux下运行vim并且使用gdb作为调试器的人,有pyclewn project。不幸的是,它不支持像dbx这样的其他调试器。

对其他要求的回应:

  
      
  • 当我运行或调试我编译的程序时,我想选择弹出一个对话框,询问命令行参数。它应该记住我用于项目的最后20个左右的参数。我不想为此编辑项目属性。
  •   

我的BuildToolsWrapper plugin有一个g:BTW_run_parameters选项(很容易被project / local_vimrc解决方案覆盖)。添加映射以询问使用的参数非常简单。 (见:h inputdialog())

  
      
  • 使用源控制系统
  •   

已经存在几个解决此问题的插件。这与C ++无关,它不能由C ++套件解决。

答案 1 :(得分:9)

  • 调试器
  • 源代码导航工具(现在我正在使用http://www.vim.org/scripts/script.php?script_id=1638插件和ctags)
  • 从ide
  • 编译lib / project / one源文件
  • 按项目中的文件导航
  • 使用源控制系统
  • 轻松访问文件更改历史记录
  • 重命名文件/变量/方法函数
  • 轻松访问c ++帮助
  • 轻松更改项目设置(Makefile,jam等)
  • 路径/变量/方法/参数的快速自动填充
  • 新范围的智能识别(如果开发人员可以设置身份识别规则,这也是一件好事)
  • 通过代码转换标识突出显示错误(标签代替空格,“;”后面的空格,“(或”)“附近的空格等)
  • 通过conversnstion重新格式化选定的块

答案 2 :(得分:2)

我在IDE中想要的东西,我使用的东西不提供:

  • 当我运行或调试我编译的程序时,我想选择弹出一个对话框,询问命令行参数。它应该记住我用于项目的最后20个左右的参数。我想要为此编辑项目属性。

  • 可以按项目配置的“工具”菜单

  • 能够为每个可能的命令重新设置键盘映射。

  • 能够以文本形式生成项目配置列表

  • 用于调试器等的智能浮动(非停靠)窗口,仅在我需要时弹出,保持在顶部,然后在不再需要时消失。

  • 内置代码指标分析,以便我获得项目中最复杂功能的列表,并可以单击它们以跳转到代码

  • 内置支持Doxygen或类似功能,因此我可以单击Doxygen文档并直接转到代码。 Sjould还可以从代码反向导航到Doxygen。

毫无疑问,现在有人会说Eclipse可以做到这一点或那样,但对我来说它太慢而且臃肿。

答案 3 :(得分:0)

添加到Neil's answer

  • 与emacs中的gdb集成。我知道clewn,但我不喜欢我必须重新启动vim才能重新启动调试器。通过clewn,vim被集成到调试器中,但不是相反。

答案 4 :(得分:0)

不确定您是否在Windows上进行开发,但如果您是,我建议您查看Viemu。它是Visual Studio的一个非常好的VIM扩展。我非常喜欢Visual Studio作为IDE(虽然我仍然认为VC6很难被击败),所以VS的Vim扩展对我来说是完美的。我更喜欢在Vim IDE中使用的功能是:

  • 宏录制有点容易出错,尤其是缩进。我发现在编辑代码时我可以轻松地经常在Vim中记录宏(例如,从一个标题中取一个enum defn并发出相应的switch语句),但发现Viemu在那个deptartment中有点不稳定。
  • VIM代码完成在当前缓冲区中拾取单词,其中Viemu挂钩到VS代码完成内容。这意味着如果我刚刚创建了一个方法名称,并且我想要ctrl]自动完成,Vim会把它拿起来,但Viemu不会。

答案 5 :(得分:0)

对我而言,这只取决于必需品

  • 与ctags很好的集成,所以你可以跳转到定义
  • 智能完成,也为您提供功能原型
  • 在代码和标题之间切换的简便方法
  • 使用breaakpoints进行交互式调试,但也许
  • 也许折叠
  • 重构工具(如重命名或提取方法)的额外奖励积分

我会说远离定义项目 - 只需将整个文件分支视为“项目”的一部分,并让用户拥有一个设置文件来覆盖该默认值

我在IDE和vim用户之间看到的速度差异的99%是代码查找和导航。您需要能够在源代码树中查找短语(或使用ctags智能查找正确的符号),显示所有匹配,并在两次或三次击键中切换到该文件。

所有其他废话如存储库导航或交互式调试都很好,但还有其他方法可以解决这些问题。我会说甚至放弃交互式调试。只关注什么使IDE成为优秀的编辑器 - 对项目有一个“全局”视图,而不是单个文件。

事实上,是否有任何vim插件已经实现了这个目标?