Vim 会把文件中的文件名当成一个超链接,进行了正确的配置后,在 Vim 普通模式下可以用 gf 命令跳转到当前光标下文件名对应的文件。(gf 命令可理解为 goto file 的缩写形式)

以下面的目录结构进行举例,假设当前目录下有个文件 event.c 和 文件夹 include,且 event.c 文件中需要引用定义在 include/event2/event.h 头文件中的函数。

1
2
3
4
5
6
.
├── event.c
├── include
│   ├── event2
│   │   ├── event.h
│   │   ├── event_struct.h

event.c 中引用 include/event2 文件夹下部分头文件的源代码如下:

1
2
3
#include "event2/event.h"
#include "event2/event_struct.h"
......

这是 C 源代码文件中最常见的头文件引用方式,如果能快速查看 include 所指定头文件的具体内容,在工作中将会非常高效、实用。Vim 普通模式下的 gf 命令正好能用于这种场景。

把光标移动到字符串 "event2/event.h" 的某个位置上后尝试执行 gf 命令,这时 Vim 会提示错误: “E447: 在路径中找不到文件 ‘event2/event.h’ “。

这是因为,Vim 确实在尝试打开名为 event2/event.h 的文件,但由于在对应路径下并未找到该文件,从而报错结束。

为了让 Vim 能按照需要在指定的目录下寻找对应文件,需要手工设置 path 选项来自定义搜索目录。path 选项可以被设置成一个以逗号分隔的目录列表。关于 path 选项的更多内容,可以使用 :help 'path' 查看官方帮助文档的介绍。

当执行 gf 命令时,Vim 会检查 path 选项指定的目录列表中的每个目录,搜索该目录中是否包含一个匹配光标下文本的文件名。若存在对应文件,则使用 tabedit 命令在新的标签页中打开。

现在,先使用 :set path+=./include,., 将当前目录下的include文件夹加入到 gf 命令的搜索路径中,再执行 gf 命令时发现已经在新的标签页中正确打开了 include/event2/event.h 文件。

每次用 gf 命令时,Vim 都会在跳转列表中增添一条记录。所以在新打开的 event.h 文件中,可以用 <Ctrl-o> 命令返回到上一次所在的 event.c 文件中。(<Ctrl-o> 命令用于后退到之前的文件中,而 <Ctrl-i> 命令则是前进到之前打开过的文件中,更多内容,可参考Vim教程网中的其他文章)。

:可使用 :set path? 命令查看当前已经设置的 path 选项的值。

vim-gf-command

除此之外,suffixesadd 选项可用于指定一个或多个文件扩展名,当 Vim 用 gf 命令搜索文件名时,会尝试在当前光标所在文件名后加上这些扩展名进行搜索,这对于 Python、ruby 等这些包含文件时不指定文件扩展名的语言来说,是个非常有用的特性。例如,可通过 :set suffixesadd+=.rb 命令增加 .rb 后缀,之后就可以直接用 gf 打开 require 指示符指定的文件了。

嗯,扫一扫就可以找到小女子我啦~