如何在Vim中找到所有出现的变量?

neu*_*ron 8 vim

在vim中,如何在某个目录下的文件中查找所有出现的变量?

我知道vimgrep有时会工作,但它只查找文本,如果其他类具有相同名称的变量并且我只想要特定类下的变量,则它不起作用.

我该怎么办?或者我应该改为使用IDE?

eck*_*kes 12

为什么要在已有的IDE中使用另一个IDE?Vim 一个可配置的IDE,可用于不同的语言.

你可以使用cscope建立一个数据库的代码.这个数据库

  • 允许搜索代码:
    • 所有对符号的引用
    • 全球定义
    • 函数调用的函数
    • 调用函数的函数
    • 文字字符串
    • 正则表达式
    • 一份文件
    • 文件包括文件

Cscope的更多功能:

  • 基于诅咒(文字屏幕)
  • 生成信息数据库以便更快地搜索和稍后参考
  • 模糊解析器支持C,但足够灵活,可用于C++和Java,并用作通用的"grep数据库"(用它来浏览大型文本文档!)
  • 具有命令行模式以包含在脚本中或作为GUI /前端的后端
  • 运行所有Unix版本,加上大多数垄断控制的操作系统.

创建数据库后,您可以浏览变量,函数等的用法.


编辑(稍微OT):
在代码上使用Vim时非常方便的另一个很酷的事情是使用Ctagstaglist插件:

"标签列表"插件是Vim的源代码浏览器插件,提供源代码文件结构的概述,并允许您有效地浏览不同编程语言的源代码文件.

  • 尽管 vim 可以被认为是一个 IDE,但是将其设置为像 IDE 一样运行的学习曲线非常陡峭。实际上需要了解 vimscript 和 `.vim` 文件夹以及它们的使用方式 (2认同)

Cir*_*四事件 5

cscope 一步一步的例子

转到项目的基本目录,然后运行:

cscope -Rb
Run Code Online (Sandbox Code Playgroud)

这将生成一个cscope.out包含已解析信息的文件.生成速度相当快,即使对于像Linux内核这样的大型项目也是如此.

打开vim,然后运行:

:cs add cscope.out
:cs find s my_func
Run Code Online (Sandbox Code Playgroud)

s是一个助记符symbol.其他cscope提供的查询也是可能的.

cscope接口(ouside Vim)还有一个变量赋值查询(符号出现的子集),Vim似乎没有提供(?)

这会将一个调用者列表添加到quickfix列表中,您可以使用以下命令打开该列表:

:copen
Run Code Online (Sandbox Code Playgroud)

转到您感兴趣的行并按Enter键跳转到那里.

也可以看看: