【问题标题】:vim: display the type of C aggregate (struct/union) members, even when nestedvim:显示 C 聚合(结构/联合)成员的类型,即使是嵌套的
【发布时间】:2013-08-07 21:32:38
【问题描述】:

我经常发现自己在阅读其他开发人员的 C 代码,其中包含类似的表达式

 ptr->member1.member2[i].another_member.final_member = 42;

并且需要找出final_member 是什么类型。通常我所做的是使用 C 标记来追踪类型链,从 ptr 的声明开始,然后深入到成员链中。这很麻烦,而且我经常被困在某个地方挠头,问自己“链中的下一个成员是什么?”更糟糕的是,在源代码树中对 final_member 进行简单的 grep 会导致太多误报,因为名称在多个结构中被重用。

有没有办法让vim直接给我答案?我愿意安装任何插件,甚至在光标位于 final_member 时输入几个字符或选择整个表达式 :-) 首选非 GUI 解决方案。

【问题讨论】:

  • 这是 c++ -> 对
  • @aaronman Nope,C,自 K&R 以来 :-)
  • 嗯,我虽然 C 没有 -> 运算符,但猜它有
  • @aaronman 也许你在想->*?那将只是 C++。

标签: c vim types ctags


【解决方案1】:

我真的建议你使用插件 clang_complete(或其他由 clang 提供支持的插件)来完成。它将通过真正的编译器为您纯完成 C/C++/Objective-C 代码,而不是通过标签的丑陋方法。完成菜单中的每个项目还具有字段类型(这就是您要查找的内容)

Omnicppcomplete 在复杂的表达式上经常失败。 Clang 非常好用,因为它是一个非常棒的编译器。

【讨论】:

  • 好的,我已经安装好了。 -> 或 . 之后的可能完成显示类型。但是,即使没有实际完成,也可以通过调用函数来显示类型,即当成员名已经完成时?
  • 你应该把光标放在函数名的末尾,然后按Ctrl+X Ctrl+U。这实际上将显示带有单个菜单项的完成菜单。
  • 好吧,我为命令模式做了一个映射:map T hei<C-X><C-U>,这可以解决问题。但这使我处于插入模式(如果我附加 <Esc> 弹出窗口会在一秒钟后消失)。有没有办法从命令模式中显示完成并使其在下一次按键事件时消失?
  • 我不知道。
【解决方案2】:

如果我正在处理具有多个嵌套结构的项目,我将 preview 添加到 completeopt 选项。

结合出色的omnicppcomplete 插件,如果您在完成菜单中选择一个条目,则会弹出一个小小的临时窗口。该临时窗口显示所选标签的一些属性。除其他外,它包含标签的搜索模式,如果是结构成员,通常包含其数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多