可以使 ctag 遵循 #include 指令吗?

2024-04-20

我正在尝试在我的 Makefile 中创建一个目标来自动创建tags使用 ctags 文件。

我有一个源文件列表(.cpp 文件),但我没有所有头文件的列表(我使用g++ -MM创建标头依赖项列表)。

我本以为 ctags 会遵循任何#include生成标签时 .cpp 文件中的指令,但似乎我的假设是错误的。

如果我创建一个像这样的简单标签文件:

ctags  --fields=+iaS --extra=+q myClass.cpp

然后进入 vim 并输入对象名称,后跟“.”我收到错误“未找到模式”。

但是,如果我像这样编译标签文件:

ctags  --fields=+iaS --extra=+q myClass.cpp myClass.h

在 vim 中做同样的事情,我得到了一个可爱的自动完成的成员变量/函数列表。

我的“myClass.cpp”文件中的第一行是

#include "myClass.h"

那么为什么 ctags 不使用它来解析头文件呢?


没有。不幸的是/幸运的是。

您自己的包含之后不会有太多问题。问题始于

  • 条件编译
  • 外部(系统)库。

幸运的是,您自己的库的问题可以通过执行类似的操作轻松解决

ctags *.h *.cpp
ctags -R src/

你可以一起破解一些东西cpp进而ctags。这样工作起来就不方便。一个半有趣的方法是修补 ctags 以遵循#line杂注在cpp的输出,因此将所有标签与其各自的源相关联。

然而,这种方法将not按照您对任何预处理器符号/定义的期望工作(宏已扩展,因此您无法通过 ctags 找到宏)。

通常的方式要解决这个问题,是为您的外部库生成一个“标准”标签文件,并且

:se tags+=/home/me/libs/tags.stdc++
:se tags+=/home/me/libs/tags.libsox

一些库有关于如何制作有用的标签文件以与其库一起使用的教程(或假设特定文件夹布局的预构建标签文件)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以使 ctag 遵循 #include 指令吗? 的相关文章

  • VIM自动插入PHPdoc

    有没有办法使用命令或组合键在 VIM 中插入 PHPDoc 例如 我有一堂课 class MyClass public function construct public function destruct command here to
  • vim 中的切换功能

    基本上我想做的是 map e call ToggleEssayMode
  • 使用 vim 处理文本文件中的 \r \n ^M ​​^@

    当我将 excel 文件中的数据行保存为制表符分隔的 txt 文件 然后在 VIM 中打开这些文件时 我发现 excel 中曾经的多行文件现在是 VIM 中的单行文件 可以使用一些替换命令在 VIM 中分隔 行 s M r n g 此后 线
  • .vimrc 控制键映射不起作用

    我的 vimrc 中有以下映射 用于映射控制键 1 2 3 用于切换选项卡 我在 ubuntu 11 10 中使用 gnome 终端 控制键映射似乎不起作用 谁能告诉我我做错了什么 VIM Vi 改进版 7 3 154 map
  • 在vim中禁用omnicomplete或ftplugin或其他东西

    我正在尝试禁用 sql 中的 自动 全向 任意 完成 这对我来说是个问题 因为我用过
  • Vim 和 Ctags:生成标签时忽略某些文件

    我有一个文件夹 llvm2 9 我在其中运行了此命令 gt ctags R sort 1 c kinds p fields iaS extra q language force C 这是 html 文件中的索引方法 也存在于 llvm2 9
  • 如何只在当前行进行搜索和替换?

    I see 如何在特定行中搜索和替换 https stackoverflow com questions 17319557 search and replace in vim in specific lines 按行号指定 以及如何使用当前
  • 使用 Webpack 波形符别名时通过 Vim 中的“gf”解析 JavaScript 模块

    我是使用波浪号的 Vue js 项目的新成员 模块导入中的符号 如 import WhateverApi from api whatever 项目存储库包含所有类型的文件 Vagrant 机器 Laravel 后端应用程序 配置文件和 Vu
  • 如何取消 Vim 中的粘贴操作?

    每当我不小心在 Putty 中右键单击 打开 Vim 时 我的剪贴板上就有相当多的文本 并且 Vim 启动了粘贴操作 该操作已经持续了大约十分钟 我不想丢失未保存的工作 有没有办法指示 Vim 停止粘贴文本 If you re in nor
  • 如何更改每种语言的 vim 设置?

    我将 vim 与许多不同的语言 C C Java shell 等 一起使用 我知道 vim 已经为每种语言预设了设置 但我想根据我个人的喜好更改每种语言的设置 我已经有一个带有设置的 vimrc 文件 但我想要更多文件来根据我使用的语言声明
  • 我可以使用 VIM 查看 Python 中函数的文档字符串吗?

    在 VIM 中编写 Python 时 有什么方法可以查看函数的文档字符串吗 例如 def MyFunction spam A function that foobars the spam returns eggs return foobar
  • 如何在会话自动加载的同时在 vim 中打开文件?

    我在 vimrc 中有以下代码 可以在 vim 启动时自动保存 加载会话 Session saving Automatically save rewrite the session when leaving Vim augroup leav
  • 当vim进入可视模式时运行命令

    我使用一个小脚本来触发插入模式以更改行号颜色 function CursorLineNrColorInsert mode Insert mode blue if a mode i highlight CursorLineNr ctermfg
  • 有没有办法在 Vim 中映射 Ctrl 句点和 Ctrl 逗号?

    我似乎找不到绘制地图的方法
  • 插件 (vim-latex) 在启动时导致 gVim 崩溃

    我正在尝试使用在 Windows XP 上使用 gVim 但是一旦我打开 tex 文件 或者一旦我set ft tex gVim 崩溃且没有可见的错误消息 控制台 vim 中不会发生崩溃 我已经按照设置说明进行了操作 据我所知 并且我尝试禁
  • Foldmethod=同时标记和语法?

    同一文件是否可以根据标记和语法使用折叠 Since foldmethod一次只能设置为一个 我认为您真正可以做到这一点的唯一方法是使用 set foldmethod expr并与foldexpr 即使如此 我也不确定它是否能够完全按照您的要
  • Vim / vi 生存指南

    基本的 vim 命令有哪些 新用户需要了解什么才能避免陷入麻烦 请每条评论一条命令 我发现不可替代的 因为它也可以在 vi 中使用 与 vim 的视觉模式不同 是标记 您可以用以下标记标记不同的点m 小写 然后是您选择的字母 例如 x 然后
  • Redhat Vim 中的可视化块插入

    我的 ec2 服务器附带了 redhat vim ec2 user vim version VIM Vi IMproved 7 2 2008 Aug 9 compiled Jul 7 2012 08 03 48 Included patch
  • svn:使用vim合并冲突

    我正在尝试看看如何使 svn 中的合并变得容易 This page http svnbook red bean com en 1 7 svn advanced externaldifftools html提到可以使用外部工具进行合并 vim
  • 如何使用 Vim 和 Eclipse 提高 PHP5.3 项目的工作效率(可能使用 Eclim 与 Zend Studio 集成)

    在开发应用程序时 我总是努力提高生产力 在过去的几年里 我可以说我在提高生产力方面取得了良好的进展 但我仍然发现我需要更多的工具或方法 我需要更快地编辑并学习盲打 目前正在过程中 因此我发现需要转向 Vim 现在已经一年多了 我已经放弃了

随机推荐

  • 如何使用 .htaccess 提供 gzip 压缩字体? (没有 mod gzip 或 deflate)

    以下是我按随机顺序尝试过的内容列表 AddHandler application x httpd php otf AddType default mimetype auto prepend file otf php zlib output
  • 对 Java 集合进行排序和分组

    我有一个有名称和分数的对象 我想对此类对象的集合进行排序 以便它们按名称分组并按每组中的最大分数排序 并且在组内也按降序分数排序 让我展示一下我想要实现的目标 假设我有这些对象 名称 分数 a 3 a 9 b 7 b 10 c 8 c 3
  • Spark 使用前一行的值向数据帧添加新列

    我想知道如何在 Spark Pyspark 中实现以下目标 初始数据框 id num 4 9 0 3 7 0 2 3 0 1 5 0 结果数据框 id num new Col 4 9 0 7 0 3 7 0 3 0 2 3 0 5 0 我通
  • 可加载组件:异步加载组件失败

    我创建了模块 A 它是我的 React 应用程序的组件库 我计划在模块 B 上使用它 这是我实际的 React 应用程序 我有一个 index js 通过以下方式使用可加载组件从模块 A 导出我的组件 import loadable fro
  • ComboBoxModel 事件不起作用

    我似乎不理解事件等概念 在阅读了有关如何实现侦听器等内容的一段时间后 我发现 Java 教程说我应该扩展AbstractListModel触发数据事件 由于某种原因它仍然不起作用 我做错了什么吗 以及预计会出现什么样的代码addListDa
  • C++中如何处理bad_alloc?

    有一种方法叫做foo有时会返回以下错误 terminate called after throwing an instance of std bad alloc what std bad alloc Abort 有没有一种方法可以让我使用t
  • 将 mogenerator 集成到 Xcode 4 中

    在我的应用程序中 我使用核心数据来实现持久数据保存 因为我已经看到 mogenerator 提供了一种很好的方法来创建和维护NSManagedObject子类 也具有附加功能 我正在寻找一些在 Xcode 4 中集成 monogenerat
  • 如何将 CSS 应用到 Mac Chrome 选择框?

    无论我做什么 使用 Mac OSX 10 9 2 和 Chrome 版本 33 0 1750 152 padding background color 没有任何效果 我真的只是想申请一个padding top and padding bot
  • 直到用户输入匹配变量为止

    好的 所以我正在尝试创建一个用户名 密码登录脚本 可能不是我仍在研究的最安全的想法 我的脚本将加载变量以与这样的文件进行比较 现在我只是在研究密码部分 path to variables conf 该文件将包含一个名为的变量 PASS SO
  • C# 睡眠检测 PowerModeChanged

    我希望我的程序在计算机进入睡眠状态时写入控制台 但我无法这样做 我认为我设置错误 这是我所拥有的 编辑 新的 cs 文件 using LightFX using System using System Threading using Sys
  • 如何让 Pyglet 为 Python 3 工作?

    我很高兴能使用 Pyglet 因为它的所有功能 但是我在 Python 3 上安装 Pyglet 的最新开发版本时遇到问题 我知道人们已经问过这个问题 但没有一个回答对我有任何帮助 更新 我的意思是 我无法为 Python 3 安装 Pyg
  • 循环动态展开子网格 - JQGrid

    我有一个带有使用 subGridRowExpanded 的子网格的网格 我想动态扩展网格的一些行 所以我写了以下内容 在第一个网格的 GridComplete 事件中 ids 是我的网格的行 id 数组 for int i 0 i lt i
  • 截断轨道后无法使用原始数据

    问题是如果我使用然后我尝试打印它 我仍然看到所有 html 标签 truncate默认情况下转义字符串 但您可以使用将其关闭 escape option description truncate post content separator
  • 是否可以为简单的类创建表单

    我只是希望能够编辑不是 ActiveRecord 类的后继类的类属性 这是我的类 app model entry rb class Entry attr accessor title body end 这是一个控制器 class Diary
  • 惰性 IO - 字符串未被垃圾收集?

    我目前正在尝试将 XML 文件的内容读入Map Int Map Int String 而且效果很好 使用 HaXml 但是 我对程序的内存消耗不满意 问题似乎是垃圾收集 这是我用来读取 XML 文件的代码 type TextFile Map
  • Spring Cloud Docker - 配置服务器无法获取属性文件作为文件后端的使用

    我在获取全部内容时遇到问题特性文件来自配置服务器 in my 春季云示例 我已经和它一起工作过Docker 我只获取了 4 个属性文件 广告服务 用户服务 API网关 报表服务 而其他属性文件 eureka服务器和管理服务 无法从配置服务器
  • 如果满足条件,如何将值添加到上一行

    我想做的是 如果 b 列中的一行等于 2 那么我想将 3 添加到 a 列中前一行的值 如果不满足条件 那么我不希望更改前一行的值 然而 当我尝试此代码时 R 正在添加到后续行 我用什么替换 1 行引用并不重要 它总是添加到后续行 df a
  • 在没有自定义 ListView 的 ListActivity 中使用 setDivider 更改分隔线?

    我似乎无法使用我定义的 Drawable 获得自定义分隔线 以便在使用ListActivity并且不创建自定义ListView 这几乎就像虚拟机创建自己的ListView对我来说 与ListActivity 它使用提供默认分隔线的主题 如果
  • 如何在 VS Code 中编辑现有的 azure 函数

    到目前为止 在我发现的有关使用 Visual Studio 代码的 Azure 函数的所有教程中 它们都是关于创建和部署的 我只是想知道如何在 VS Code 中打开现有的 azure 函数 修改它并重新部署它 那可能吗 I can ope
  • 可以使 ctag 遵循 #include 指令吗?

    我正在尝试在我的 Makefile 中创建一个目标来自动创建tags使用 ctags 文件 我有一个源文件列表 cpp 文件 但我没有所有头文件的列表 我使用g MM创建标头依赖项列表 我本以为 ctags 会遵循任何 include生成标