29.4查找全局标识符
你正在编写C程序,并且想知道一个变量是被声明为int或者unsigned。一个发现这个的快速方法是使用[I命令。
假设光标在column这个字上,输入[I,vim会列出匹配的所有行。不仅仅在当前文件,所有包含文件,和包含文件中包含的文件,都会列出。
这种方式相对于使用tags和分屏的好处就是包含文件也被搜索。多数情况下,这将会正确的找到声明。即使tags文件过期了,或者你没有对于包含文件的tags文件。
当然,一些事情必须正确,才能保证[I完成它的工作。首先,include选项必须指明文件如何被包含。默认是对于C和C++。其他语言,你必须自己去设置。
加载包含文件
vim将会在使用path选项指明的地方查找包含文件。如果目录不正确,一些包含文件将不能被找到。你可以使用如下命令查看:
:checkpath
它将会列出所有不能找到的包含文件。当然,也会列出发现的包含没有发现文件的包含文件。
注意:
vim不是一个编译器。它不能够识别#ifdef语句。这意味着每个#include语句都被用以包含,即使其在#if NEVER的语句后边。
解决文件不能被找到的错误,增加一个目录到path选项。一个找到这些信息的好地方是Makefile。查找-I的项,例如 -I/usr/local/X11。把这些目录增加到path:
:set path+=/usr/local/X11。
你可以使用通配符:
:set path+=/usr/*/include
使用**意味着所有的子目录,例如:
:set path+=/projects/invent/**/include
你可以看看一个包含文件是否真的被找到:
:checkpath!
你将获取一个包含文件的列表,列出包含的文件等。为了将这个列表减少,vim对于那些已经在之前显示的包含文件,显示already listed,并且不再在那显示。
跳转到一个匹配
[I 仅仅处理list文本的一行。当你希望对于第一个item有近距离观看的时候,使用如下命令跳转:
[<Tab>
你也可使用 [ CTRL-I,因为其作用相同。当你想跳转到不是第一个的其他item,你可以在命令前打出一个行号:
3[<Tab>
上述将跳转到list中第三个item。注意,你可以使用CTRL-0跳回到你开始的地方。
相关命令:
[i 仅仅列出第一个匹配
]I 仅仅列出在光标下的项
]i仅仅列出光标下的第一项
查找定义的标识符
[I命令发现任何标识符。仅仅查找宏,即以#define开始的定义,使用如下命令:
[D
这也是在include文件中进行的。define选项指明对于[D的定义的item的行的样子。你可以将其改变,以适应不同的除了c和c++外的语言。
相关ID的命令有:
[d 第一个匹配
]D 光标下的匹配
]d 光标下的第一个匹配