Vim:如何转到声明(类、方法、函数、变量等)

2024-02-19

现在我正在处理一个使用许多类、方法、函数、变量等的文件。是否可以转到所有这些的声明?请考虑到其中一些声明位于同一个文件中,但其他声明位于其他文件中(这些文件可能未打开,并且您不知道声明在哪里,但它们确实存在)。如果声明在目录中为上一级,会发生什么情况?如果低一级呢?

根据我们正在讨论的编程语言,这是以不同的方式完成的,还是无论使用哪种语言,查找声明的过程都是相同的?

我一直在阅读,似乎解决方案与标签有关。但是,我想知道如何实现这一点(一步一步),特别是考虑到我们在某些情况下正在讨论其他文件中的定义。

我知道这可以通过 IDE 来完成,但我想知道使用 vim 可以实现多少不同。

我只全新安装了 Vim。我还没有安装任何插件,但如果有必要的话愿意安装。也许这可以在不使用或使用插件的情况下完成。

提前致谢!


配置tags并不是那么困难,尽管(就像 Vim 中的大多数事情一样)它不像 IDE 那样自动。

  1. 首先,您需要ctags工具。 2022年最常见的是通用C标签 https://github.com/universal-ctags/ctags; 2013年是旺盛的C标签,发现于ctags.sourceforge.net http://ctags.sourceforge.net/.
  2. 接下来,您需要创建一个标签数据库(一个文件名tags) 对于项目中的所有文件。这通常是通过运行来完成的ctags -R .从你的项目根目录(也可以从 Vim 中通过:!ctags ...)。丰富的 Ctags 支持41种语言 http://ctags.sourceforge.net/languages.html,您甚至可以通过正则表达式扩展它。
  3. 最后,需要配置 Vim 来获取标签数据库. With :set tags=./tags;,它将在文件目录中向上搜索到根目录。如果您有某些全局包含目录,则可以添加它们。
  4. 这样,您就可以开始使用 Vim 的标签功能了,例如<C-]> and :tag.

您需要定期更新标签数据库;有插件(比如易标签.vim http://www.vim.org/scripts/script.php?script_id=3114; 2022 警告:未维护,但仍在工作)可以自动为您执行此操作。

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

Vim:如何转到声明(类、方法、函数、变量等) 的相关文章

  • vim:打开预览窗口而不移动主窗口中的文本

    当全能完成 或其他方式 打开预览窗口时 主窗口的大小会减小 以便为预览窗口腾出空间 默认情况下 预览窗口弹出前主窗口中可见的第一行在预览窗口弹出后也将相同 这会产生不幸的效果 即主窗口中的文本在视觉上被下推 我希望主窗口中的文本保留在原来的
  • 你能让 vi 在打开时“前进”屏幕吗?

    我经常在 vi 中工作 暂停 vi 在 cli 上运行一些东西 然后返回到 vi 来处理结果 例如 修复运行 cli 命令时出现的错误 但是 当我 fg vi 时 vi 会 擦除 当前终端缓冲区 并且我在回滚缓冲区中看不到终端输出的 最后一
  • 切换 git 分支时如何处理 vim 缓冲区?

    因此 我在 vim 缓冲区中打开了大量文件 并且正在使用 git 处理功能分支 突然 我意识到我需要恢复到主分支来进行快速修复 提交后 我将 vim 会话保持打开状态并切换回 master 分支 但是 当我尝试从缓冲区加载我需要的文件时 我
  • jquery 改变标签

    我的代码不起作用 你能帮我吗 我希望将 class s7 的标签名称 p 更改为 h1 问题是您将所有元素与类相匹配s7 但是您需要对它们进行一一处理 以便将其内容复制到新元素中 在您当前的代码中 this总是document 不是当前元素
  • 文件保存期间语法突出显示随机消失

    我正在使用 vim 编辑一些 python 文件 最近偶尔会出现在 vim 中保存缓冲区后语法高亮消失的情况 我尝试重置syntax on and set filetype python但无济于事 我根本不知道是什么原因导致了这个问题 所以
  • 有没有办法用 Vim 自动重新格式化大括号?

    我想重新格式化一些代码 如下所示 if cond foo to if cond foo 由于这是C代码 所以我一直在看cindent cinoptions与使用 但它似乎不处理多行规则 我一直在看formatoptions与使用gq 而且似
  • 当vim进入可视模式时运行命令

    我使用一个小脚本来触发插入模式以更改行号颜色 function CursorLineNrColorInsert mode Insert mode blue if a mode i highlight CursorLineNr ctermfg
  • Vimscript 检查当前缓冲区是否有未保存的更改

    我目前已设置状态行 使其在插入模式下为橙色 否则为白色 如果文件有任何未保存的更改 我想让它在我回到正常模式时变成另一种颜色 因为我经常在兔子洞里走一会儿 想知道为什么我的更改没有生效 小 还不够打我的脸 我找不到任何以 buf 开头且看起
  • 有没有办法在 Vim 中映射 Ctrl 句点和 Ctrl 逗号?

    我似乎找不到绘制地图的方法
  • 在 VIM 中缩进文件夹中的所有文件

    我有一个包含数百个 TTL TeraTermLanguage 文件的文件夹 现在我想缩进所有这些文件 我已经创建了用于缩进的 teraterm vim 并使用 VIM 打开一个文件并执行 gg G 整个文件得到了正确的缩进 但是有什么方法可
  • Vim 关闭窗口而不关闭缓冲区

    如何在不删除缓冲区的情况下关闭窗口或取消分割 A window is a viewport on a buffer In vim to manage windows it is CTRL w the leading command that
  • 如何定义基于标签的组织结构?

    原标题 有没有办法在基于标签的组织方法上强制建立关系结构 我有一些实体 它们有一系列属性 一些属性影响实体可以具有的其他属性 许多属性被组织成组 并且有时实体被要求具有来自某些组的一定数量的属性 或者可能具有来自某些组的一定范围的属性 有没
  • 如何在 Vim 中从命令行模式复制文本?

    比如说 我刚刚在 Vim 中运行了这个命令 nmap
  • Foldmethod=同时标记和语法?

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

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

    我一直在努力向 Rally 中的测试用例添加标签 该标签已存在于 Tags 集合中 但我无法将其添加到测试用例中 有人可以提供一个关于如何执行此操作的示例吗 多谢 下面是如何执行此操作的示例 该示例显示了向现有测试用例添加标签 以及创建新测
  • vim 退出时恢复 shell

    我刚刚在我的新计算机上安装了 Arch 但我不知道需要向 vimrc 添加什么命令 以便它在退出时恢复 shell 内容 在调用 vim 之前 也就是说 我希望我的 shell 看起来像这样 whoami root who root tty
  • 在 Vim 中,为什么用 'j' 表示向下,用 'k' 表示向上?

    我使用 Vim 已经很多年了 但从未真正考虑过它 我的一个朋友问这是为什么 他指出在我们的文化中 左键通常映射到上 而右键映射到下 使 Vim 键向后 我知道它们位于主排 这意味着您不必将手指移动到任何地方即可击中它们 但这完全是不同的点
  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • 内容自动分类

    我正在开发一个脚本 从我所属的特定 meetup com 组的消息存档中提取消息 http www meetup com opencoffee messages archive http www meetup com opencoffee

随机推荐

  • 如何使用textview.getLayout()?它返回空值

    我正在尝试设置布局textview所以我可以用getEllipsisCount 方法 但下面的代码返回 null 作为布局值 我如何进行布局然后使用getEllipsisCount 0 method public class MainAct
  • Matlab中使用滑块旋转图像

    我在 Matlab 中有一个 GUI 使用 GUIDE 它看起来是这样的 我想使用滑块旋转图像并实时显示变化 我使用轴来显示图像 我怎样才能做到这一点 EDIT 我正在构建 OCR 应用程序 这就是我旋转盘子时的样子 数字完全变形了 tha
  • Mac osx 10.9.2 上的 mysql-python:错误:命令“/usr/bin/clang”失败,退出状态为 1

    我想将我的 django 应用程序从 sqlite 移植到 mysql 但是当我尝试安装 mysql python 时 它给了我这个错误 错误 命令 usr bin clang 失败 退出状态为 1 我四处寻找线索并尝试了这个似乎对大多数人
  • 如何将数据从控制器传递到 ASP.net MVC 中的视图? [复制]

    这个问题在这里已经有答案了 net MVC 我需要做的事情对于我认识的每个人来说都很简单 我需要在控制器之间传递数据以在 ASP net MVC 中查看 我在控制器中编写的代码 public ActionResult Upload View
  • Bundler 未加载 gem

    我在使用 Bundler 和能够访问我的宝石而不需要在某个地方需要它们时遇到了问题 因为config gem曾经为我这样做过 据我所知 在我的 Rails 3 应用程序中 我定义了我的Gemfile像这样 clear sources sou
  • 如何用按钮更新闪亮的数据表

    我试图在用户按下 Shiny 中的按钮后简单地更新数据框的列 我对当前显示的数据帧如何传递到服务器端函数有点困惑 一旦按下按钮 列 cyl 应增加 10 如果再次按下按钮 列应采用重新计算的值并再乘以 10 依此类推 到目前为止 我已经做到
  • 如何使用 Javascript 从 JSON 文件中选择随机对象(?)?

    在我正在制作的 Discord Bot 中 它需要从 JSON 文件中选择一个随机对象 我当前的代码是这样的 function spawn if randomNum 24 return const name names randomNum
  • UISearchBar 范围栏位置?

    我在使用 iPad 应用程序 我想知道是否可以将范围栏从 UISearchBar 的右侧移动到另一个位置 我希望将范围栏放在搜索栏下方 那可能吗 提前致谢 好的 这是我的解决方案 我将实现我自己的分段控件来创建搜索范围的可能性 let ca
  • 反应本机本地通知

    我是 React Native 的新手 需要实现一个功能 应用程序需要每天在特定时间向用户发送通知 每天要显示的数据存储在客户端的json文件中 不会改变 通知已按计划进行 鉴于我希望有一种方法可以从应用程序本身触发通知 有谁知道无需将应用
  • 访问相机和照片库

    在我的 iOS 应用程序中 我有一个 ImageView 和两个用于打开相机和照片库的按钮 当我单击其中一个按钮时 应用程序将关闭 我在我的设备上运行应用程序 而不是模拟器 我的代码需要更改什么 class PhotoViewControl
  • 保留 std::set 或 std::unordered_set 上的插入顺序

    在将其标记为重复之前 我已经here https stackoverflow com questions 1098175 a stdmap that keep track of the order of insertion here htt
  • PDO bindColumn 和 PDO::FETCH_BOUND —— 强制还是可选?

    在我们的 PHP 代码的许多地方 如果重要的话可以使用 postgres 我们有这样的东西 q SELECT DISTINCT a id FROM alarms current a entities e installations i q
  • jQuery AJAX 响应设置 Cookie 标头

    我有一个使用 REST API 的项目 在这里 当我发送登录请求时 他们会以包含一些数据的 JSON 形式向我发送响应 与响应标头中的内容一起 Access Control Allow Origin Connection keep aliv
  • 在不同的元素上使用相同的控制器来引用同一个对象

    我想如果我打了一巴掌ng controller GeneralInfoCtrl 在我的 DOM 中的多个元素上 它们会共享相同的内容 scope 或者至少双向绑定不起作用 我想要这样做的原因是因为我在 HTML 的不同部分有不同的只读视图和
  • SVG 不从父级继承值

    所以这似乎是一个错误今天出现在 Chrome 中 显然还有 Firefox 我有一个 SVG 包裹在一个跨度内 我也尝试过 div 和对象标签 这似乎并不重要 并且该跨度具有指定的高度和宽度 昨天 子元素会根据其父元素的完整尺寸适当调整自身
  • 是否有一种算法可以从数组中提取二重奏中的值并对它们进行操作? [复制]

    这个问题在这里已经有答案了 我有一个像这样的数组 1 2 3 4 5 6 7 8 9 我想在二重唱中获得这样的项目 1 2 做一些操作 2 3 做一些操作 3 4 做一些操作 4 5 做一些操作 5 6 做一些操作 6 7 做一些操作 7
  • 从 Samsung Tizen TV 应用程序启动 AppStore

    我正在尝试在基于 Javascript 的 Tizen TV 应用程序中实现一个按钮 单击该按钮后 它应该打开另一个应用程序的 App Store 页面 我指的是这些文件 https developer tizen org sites de
  • UIWebView 日志消息 iOS 7 [重复]

    这个问题在这里已经有答案了 我正在开发一个使用网络浏览器的应用程序 在构建它后我收到了以下消息 UITextField webView called This method is no longer supported with the n
  • 如果模板尚未使用某种类型实例化,是否可能会触发编译器/链接器错误?

    后续问题 转换为指向模板的指针是否会实例化该模板 https stackoverflow com questions 8379002 does a casting to a pointer to a template instantiate
  • Vim:如何转到声明(类、方法、函数、变量等)

    现在我正在处理一个使用许多类 方法 函数 变量等的文件 是否可以转到所有这些的声明 请考虑到其中一些声明位于同一个文件中 但其他声明位于其他文件中 这些文件可能未打开 并且您不知道声明在哪里 但它们确实存在 如果声明在目录中为上一级 会发生