在开发 VIM 插件之前,需要了解一下,一个 VIM 插件项目的目录结构是怎样的,以及每一个目录里文件的意义是什么。 VIM 插件标准的目录结构为:
autoload/ 自动载入脚本
colors/ 颜色主题
plugin/ 在 Vim 启动时将被载入的脚本
ftdetect/ 文件类型识别脚本
syntax/ 语法高亮文件
ftplugin/ 文件类型相关插件
compiler/ 编译器
indent/ 语法对齐
下面,我们来逐一说明下每一个目录的用途:
- autoload/:顾名思义,该文件夹下的脚本会在特点条件下自动被载入。这里的特定条件指的是当某一个 autoload 类型的函数被调用,并且 VIM 当前环境下并未定义该函数时。 比如调用
call helloworld#init()
时,VIM 会先检测当前环境下是否定义了该函数,若没有,则在autoload/
目录下找helloworld.vim
这一文件, 并将其载入,载入完成后执行call helloworld#init()
. - plugin/:该目录里的文件将在 VIM 启动时被运行,作为一个优秀的 VIM 插件,应当尽量该目录下的脚本内容。通常,可以将插件的快捷键、命令的定义保留在这个文件里。
- ftdetect/:ftdetect 目录里通常存放的是文件类型检测脚本,该目录下的文件也是在 VIM 启动时被载入的。在这一目录里的文件内容,通常比较简单,比如:
autocmd BufNewFile,BufRead *.helloworld set filetype=helloworld
,该脚本使得 VIM 在打开以.helloworld
为后缀的文件时,将文件类型设置为helloworld
。通常,这个脚本的文件名是和所需要设置的文件类型一样的,上面的例子中文件的名称就是helloworld.vim
。 - syntax/:这一目录下的文件,主要是定义语法高亮的。通常文件名前缀和对应的语言类型相同,比如 Java 的语法文件文件名为
java.vim
。 关于如何写语法文件,将在后面详细介绍。 - colors/:colors 目录下主要存储一些颜色主题脚本,当执行
:colorscheme + 主题名
命令时,对应的颜色主题脚本将被载入。比如执行:colorscheme helloworld
时,colors/helloworld.vim
这一脚本将被载入。 - compiler/:这一名录里是一些预设的编译器参数,主要给
:make
命令使用的。在最新版的 VIM 中可以使用:compiler! 编译器名
来为当前缓冲区设定编译器。比如当执行:compiler! helloworld
时,compiler/helloworld.vim
这一脚本将被载入。 - indent/:在 indent 目录里,主要是一些语法对齐相关的脚本。