代码之家  ›  专栏  ›  技术社区  ›  Mykola Golubyev

C++ VIM-IDE。你需要的东西

  •  18
  • Mykola Golubyev  · 技术社区  · 16 年前

    我要创建C++ IDE vim 可扩展的 插件 . 做一个能满足我自己需要的东西不是问题。

    这个插件将用于工作区、项目及其依赖项。
    这是用于类Unix系统的 海湾合作委员会 作为C++编译器。

    所以我的问题是,你需要从一个IDE中得到什么最重要的东西?请考虑到这是Vim,几乎所有的,几乎,都是可能的。

    几个问题:
    您多久管理一次不同的工作空间,其中包含项目及其之间的关系?这个过程中最烦人的是什么?
    是否需要从生成文件重新创建“项目”?
    谢谢。

    创建此插件的原因:

    有了一堆插件和自编的插件,我们可以模拟大多数情况。当我们处理一个大的“不定式”项目时,这是可以的。
    很好,当我们已经有一个makefile或jam文件时。当我们必须创建我们的所有者时,这很糟糕,主要是通过复制和粘贴现有的所有者。
    所有与ctags和cscope相关的事情都必须了解真实项目文件的列表。我们创造了这些。这个<project_get_list_of_files()>和许多类似的功能可能是一个很好的项目API功能,可以与现有和未来的插件合作。 与现有的makefiles合作可以帮助找出实际项目文件的列表和可执行文件名。 插件系统内的插件可以有不同的项目模板。

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

    6 回复  |  直到 16 年前
        1
  •  9
  •   bayda    16 年前
    • 调试器
    • 源代码导航工具(现在我正在使用 http://www.vim.org/scripts/script.php?script_id=1638 插件和ctags)
    • 从IDE编译lib/project/one源文件
    • 按项目中的文件导航
    • 使用源代码管理系统
    • 轻松访问文件更改历史记录
    • 重命名文件/变量/方法函数
    • 轻松访问C++帮助
    • 轻松更改项目设置(生成文件、卡纸等)
    • 快速自动完成路径/变量/方法/参数
    • 新作用域的智能识别(如果开发人员能够设置识别规则,这也是一件好事)
    • 按代码惯例突出显示不正确的标识(制表符代替空格、“;”后的空格、“(“或”)”附近的空格等)
    • 按惯例重新匹配所选块
        2
  •  12
  •   Luc Hermitte    10 年前

    有很多问题。它们中的大多数已经通过独立的和通用的插件来解决。

    关于什么是 项目 .

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

    最后,真正定义一个项目的是一个(leaf)“makefile”--为什么要限制自己生成文件,那么scon、autotools、ant,(b)jam、aap呢?顺便问一下,sun makefiles还是gnu makefiles?

    此外,我不认为让Vim知道当前项目中的确切文件有什么意义。即使如此,众所周知的 project.vim plugin 已经完成了任务。我个人使用 local_vimrc plugin (我维持着一个,我在旧金山见过另外两个)。使用这个插件,我只需将一个vimrc本地.vim文件放到一个目录中,其中定义的(:mappings、:functions、variables、:commands、:settings,…)将应用于目录下的每个文件——我在一个大项目中工作,该项目有十几个子组件,每个组件都位于自己的目录中,有自己的makefile(甚至没有命名)。makefile,或目录名)

    关于C++代码理解

    每次我们想做一些复杂的事情(重构函数,比如重命名函数,重命名变量,从当前变量中生成开关,这是枚举,…),我们需要VIM来理解C++。大多数现有插件都依赖CTAG。遗憾的是,C++对CTAGS的理解是相当有限的——我已经写了一篇文章。 few advanced things 但是我经常被CTags提供的糟糕信息打断。CScope也不好。最后,我认为我们必须整合一个先进的工具,比如ELSA/Pork/IONK/Deshydra/…

    NB:那就是我现在集中精力的地方。

    关于强力根

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

    从一个doxygen页面的右代码行打开vim应该很简单,只需要一个greasemonkey插件。

    关于调试器

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

    对其他要求的响应:

    • 当我运行或调试编译后的程序时,我希望弹出一个对话框,要求我输入命令行参数。它应该记住我在项目中使用的最后20个左右的参数。我不想为此编辑项目属性。

    我的 BuildToolsWrapper plugin 有一个 g:BTW_run_parameters 选项(很容易被项目/本地Vmrc解决方案覆盖)。添加一个映射来询问要使用的参数非常简单。(请参见:h inputDialog())

    • 使用源代码管理系统

    已经有几个插件解决这个问题。这与C++无关,它不能由C++套件来解决。

        3
  •  2
  •   anon    16 年前

    我想在一个IDE中使用的东西我不提供:

    • 当我运行或调试编译后的程序时,我希望弹出一个对话框,要求我输入命令行参数。它应该记住我在项目中使用的最后20个左右的参数。我愿意 需要为此编辑项目属性。

    • 可根据每个项目配置的“工具”菜单

    • 重新配置键盘映射的能力 每一个 可能的命令。

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

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

    • 内置的代码度量分析,因此我得到了项目中最复杂的函数的列表,并可以单击它们来跳转到代码。

    • 内置对doxygen或类似的支持,所以我可以单击一个doxygen文档并直接转到代码。Sjould还可以从代码反向导航到doxygen。

    毫无疑问,现在有人会说Eclipse可以做到这一点,但对我来说,它太慢了,太膨胀了。

        4
  •  0
  •   Community CDub    8 年前

    添加到 Neil's answer :

    • 在Emacs中与gdb集成。我知道 clewn 但我不喜欢这样,我必须重新启动Vim才能重新启动调试器。使用clewn,vim被集成到调试器中,但不是相反。
        5
  •  0
  •   RedBlueThing    16 年前

    不确定是否在Windows上开发,但如果是,我建议您签出 Viemu . 对于Visual Studio来说,它是一个很好的VIM扩展。我真的很喜欢将Visual Studio作为一个IDE(尽管我仍然认为VC6很难击败),所以vs的vim扩展非常适合我。我更喜欢在VIM IDE中工作得更好的特性是:

    • 宏记录很容易出错,尤其是在缩进时。我发现在编辑代码的时候,我可以很容易并且经常在vim中记录宏(例如,从一个头中提取一个枚举defn,并生成一个相应的switch语句),但是发现viemu在这个department中有点松散。
    • VIM代码完成在当前缓冲区中提取单词,VIEMU在这里钩住VS代码完成的东西。这意味着,如果我刚刚创建了一个方法名,并且我希望ctrl]自动完成,vim会接受它,但是viemu不会。
        6
  •  0
  •   heathkit    15 年前

    对我来说,这只是必需品

    • 很好地与ctags集成,因此您可以跳到定义
    • 智能完成,这也为您提供了函数原型
    • 在代码和标题之间切换的简单方法
    • 与breaakpoints交互调试,但可能
    • 可能折叠
    • 重构工具(如重命名或提取方法)的额外奖励点数

    我想说,不要定义项目——只需将整个文件分支作为“项目”的一部分,并让用户拥有一个设置文件来覆盖该默认值。

    我看到的IDE和VIM用户在速度上的差别有99%是代码查找和导航。您需要能够对源代码树进行grep以获取短语(或使用ctags智能地查找正确的符号),显示所有点击量,然后像两个或三个击键一样切换到该文件。

    所有其他的垃圾(如存储库导航或交互式调试)都是不错的,但是还有其他方法可以解决这些问题。我会说,甚至放弃交互式调试。只需专注于使IDES成为优秀的编辑器的原因——拥有项目的“大局”视图,而不是单个文件。

    事实上,VIM有没有已经实现这一点的插件?