ADA 文 件 类 型 参 考 手 册
译者: Willis
ADA ada.vim
1. 语法高亮 ft-ada-syntax
2. 文件类型插件 ft-ada-plugin
3. 全能补全 ft-ada-omni
3.1 使用 "gnat xref" 的全能补全 gnat-xref
3.2 使用 "ctags" 的全能补全 ada-ctags
4. 编译器支持 ada-compiler
4.1 GNAT compiler-gnat
4.2 Dec Ada compiler-decada
5. 参考 ada-reference
5.1 选项 ft-ada-options
5.2 命令 ft-ada-commands
5.3 变量 ft-ada-variables
5.4 常数 ft-ada-constants
5.5 函数 ft-ada-functions
6. 附加插件 ada-extra-plugins
1. 语法高亮
ft-ada-syntax
本模式针对 2005 年版的 Ada ("Ada 2005") 设计,支持面向对象编程,受保护类型等特
性。同时也兼容早期 Ada 语言版本 ("Ada83"、"Ada87"、"Ada95"),但代码里如果使用
Ada 2005 特有关键字,颜色显示可能会不准确 (不过这类代码本来也应该被修正)。更多
关于 Ada 的信息,见 http://www.adapower.com。
Ada 模式能够正确地处理多种语法情况。
例如,它能识别 "-5" 里的 "-" 是数值的一部分,而 "A-5" 里的 "-" 则是操作符。
"with" 或 "use" 语句如果用于引用其他编译单元 (unit),缺省会采用类似 C 语言里的
"#include" 相同的色彩,否则就会视作普通的关键字。"end if" 和 "end loop" 会分别
根据其所属分组 "Conditional" 或 "Repeat" 来着色,需要不同色彩时可重定义相应的
高亮属性。其他情况下 "end" 会被视为关键字,使用 "Keyword" 分组。
vim 的 "highlight" 命令可自定义色彩 (例如,要改变循环的显示方式,可输入命令
`:hi Repeat` 并后跟色彩规格说明;在普通终端上,色彩规格 ctermfg=White 通常就有
不错的显示效果)。
本 Ada 模式可以设置若干选项。完整列表可参见 ft-ada-options 。
可通过设置变量启用相关选项。例如:
let g:ada_standard_types = 1
可用 :unlet 关闭选项。例如:
unlet g:ada_standard_types
要临时开关选项,在载入 Ada 文件前,可用 ":" 在命令行输入这些命令。如果希望这种
设置永久生效,将 "let" 等命令 (无需冒号) 加入 "~/.vimrc"。
即使在慢速 (90Mhz) PC 上,该模式通常也足够快。但如果还是感觉速度受影响,可以打
开 g:ada_withuse_ordinary 。
设置 g:ada_folding 可控制语法折叠 ( fold-syntax ) 的使用。
2. 文件类型插件
ft-ada-indent ft-ada-plugin
Ada 插件提供以下支持:
- 自动缩进 ( indent.txt )
- 插入模式补全 ( i_CTRL-N )
- 用户自定义补全 ( i_CTRL-X_CTRL-U )
- 标签搜索 ( tagsrch.txt )
- 快速修复 ( quickfix.txt )
- 退格处理 ('backspace')
- 注释处理 ('comments'、'commentstring')
本插件仅在打开 Ada 文件时激活 Ada 模式功能,并自动向主菜单和弹出菜单添加 Ada
相关条目。
3. 全能补全
ft-ada-omni
Ada 全能补全 ( i_CTRL-X_CTRL-O ) 使用 "gnat xref -v" 或 "Universal Ctags"
(http://ctags.io) 创建的标签数据库。补全函数可自动识别标签文件的来源,并作相应
处理。
3.1 使用 "gnat xref" 的全能补全
gnat-xref
GNAT XREF 基于编译器生成的内部信息 (ali-文件) 来生成标签文件。其优点是 100% 正
确,也支持深层的嵌套分析。但也有限制: 代码必须能成功编译,生成器速度相当慢,而
且生成的标签文件仅包含 Ctags 所需的基本条目信息 - 不足以应付一些高级 Vim 代码
浏览器插件的需要。
备注: "gnat xref -v" 非常难用,因为它几乎没有任何诊断输出 - 如果没有输出,通常
是因为输入的参数有问题。这里有一些重要提示:
1) 请先编译代码,并使用 "-aO" 选项指向 .ali 文件。
2) "gnat xref -v ../Include/adacl.ads" 不行 - 需用
"gnat xref -v -aI../Include adacl.ads" 代替。
3) "gnat xref -v -aI../Include *.ad?" 不行 - 需要先 "cd ../Include",然后用
"gnat xref -v *.ad?"
4) 完全不支持项目管理文件 ("-P" 选项) - 无需尝试 "gnat xref -Padacl.gpr"。
5) 推荐使用已排序的标签文件以提高 Vim 性能 - 可用
"sort --unique --ignore-case --output=tags tags"。
6) 排序后应在首行添加 "!_TAG_FILE_SORTED 2 %sort ui" 以作标记。
3.2 使用 "ctags" 的全能补全
ada-ctags
Universal/Exuberant Ctags 使用其自带的多语言代码分析器。分析速度快,提供更多扩
展信息,也可处理尚不能编译的文件。
有大量其他 Vim 工具使用 Universal/Exuberant Ctags。建议使用 Universal Ctags,
Exuberant Ctags 已停止维护。
要安装 Universal Ctags 版本时,可从 https://ctags.io 获取。
Universal/Exuberant Ctags 的 Ada 解析器仍在完善中,功能不完整在所难免。
4. 编译器支持
ada-compiler
Ada 模式支持多个 Ada 编译器,打开 Ada 源代码时, g:ada_default_compiler 设置
的编译器会被自动载入。此编译器插件分为两部分: 实际的编译器插件、以及相关的支持
函数及变量的集合,以方便根据用户的开发环境定制此编译器插件。
4.1 GNAT
compiler-gnat
GNAT 是仅有的 free ((免费的) 啤酒和 (自由的) 言论) Ada 编译器。现有若干许可证
条款上略有出入的不同版本。
按 <F7> 时,GNAT 编译器插件会进行编译并立即显示结果。可如下设置项目文件:
call g:gnat.Set_Project_File ('my_project.gpr')
设置项目的同时,也会同时建立相应的 Vim 会话 ( views-sessions ),这样 - 就像
GPS 那样 - 会为所有项目分别记住已打开的文件、窗口位置、等等。
gnat_members
GNAT 对 象
g:gnat.Make()
g:gnat.Make()
调用 g:gnat.Make_Command 并在 quickfix 窗口里显示结果。
g:gnat.Pretty()
g:gnat.Pretty()
调用 g:gnat.Pretty_Program 。
g:gnat.Find()
g:gnat.Find()
调用 g:gnat.Find_Program 。
g:gnat.Tags()
g:gnat.Tags()
调用 g:gnat.Tags_Command 。
g:gnat.Set_Project_File()
g:gnat.Set_Project_File([{file}])
设置 gnat 项目文件并载入相应会话。关闭已打开的项目并写入相应会
话。省略文件名时,会打开文件选择对话框,以选择项目文件。提供空
串时,会关闭当前项目和相关会话。
g:gnat.Project_File
g:gnat.Project_File 字符串
指定当前项目文件。
g:gnat.Make_Command
g:gnat.Make_Command 字符串
指定用于 g:gnat.Make() 的外部命令 ('makeprg')。
g:gnat.Pretty_Program
g:gnat.Pretty_Program 字符串
指定用于 g:gnat.Pretty() 的外部命令。
g:gnat.Find_Program
g:gnat.Find_Program 字符串
指定用于 g:gnat.Find() 的外部命令。
g:gnat.Tags_Command
g:gnat.Tags_Command 字符串
指定用于 g:gnat.Tags() 的外部命令。
g:gnat.Error_Format
g:gnat.Error_Format 字符串
指定错误格式 ('errorformat')。
4.2 Dec Ada
compiler-hpada compiler-decada
compiler-vaxada compiler-compaqada
Dec Ada (也叫做 - 按照编年序 - VAX Ada、Dec Ada、Compaq Ada 和 HP Ada) 是一个
相当古老的 Ada 83 编译器。只提供基础支持: <F7> 编译当前单元。
Dec Ada 编译器期待传入的参数是包 (package) 名而不是文件名。但本编译器插件支持
一般的文件名格式,并会自动把文件转换为单元名。'-' 和 '__' 都可用作分隔符。
decada_members
DEC ADA 对 象
g:decada.Make()
g:decada.Make() 函数
调用 g:decada.Make_Command 并在 quickfix 窗口里显示结果。
g:decada.Unit_Name()
g:decada.Unit_Name() 函数
获取当前文件的单元名。
g:decada.Make_Command
g:decada.Make_Command 字符串
指定用于 g:decada.Make() 的外部命令 ('makeprg')。
g:decada.Error_Format
g:decada.Error_Format 字符串
指定错误格式 ('errorformat')。
5. 参考
ada-reference
5.1 选项
ft-ada-options
g:ada_standard_types
g:ada_standard_types 布尔型 (存在代表为真)
高亮 Standard 包里的类型 (如 "Float")。
g:ada_space_errors
g:ada_no_trail_space_error
g:ada_no_tab_space_error
g:ada_all_tab_usage
g:ada_space_errors 布尔型 (存在代表为真)
高亮多余空格的错误...
g:ada_no_trail_space_error
- 但忽略拖尾的空格
g:ada_no_tab_space_error
- 但忽略空格之后的制表符
g:ada_all_tab_usage
- 高亮所有使用的制表符
g:ada_line_errors
g:ada_line_errors 布尔型 (存在代表为真)
高亮过长的行。注意: 本高亮选项相当占用 CPU。
g:ada_rainbow_color
g:ada_rainbow_color 布尔型 (存在代表为真)
'(' 和 ')' 使用彩虹色。为此需要 rainbow_parenthesis 插件。
g:ada_folding
g:ada_folding 集合型 ('sigpft')
为 Ada 源代码提供折叠。
's': 文件载入时,激活语法折叠
'p': 折叠包
'f': 折叠函数和过程
't': 折叠类型
'c': 折叠条件句
'g': 文件载入时,激活 gnat 美化显示折叠
'i': 单个 'is' 和上一行一起折叠
'b': 单个 'begin' 和上一行一起折叠
'p': 单个 'private' 和上一行一起折叠
'x': 单个 'exception' 和上一行一起折叠
'i': 文件载入时,激活缩进折叠
备注: 语法折叠尚处于早期 (不可用) 阶段,建议仅使用缩进或 gnat
美化折叠。
要使 gnat 美化折叠可用,建议使用下列设置: -cl3 -M79 -c2 -c3
-c4 -A1 -A2 -A3 -A4 -A5
要使缩进折叠可用,建议使用下列设置: shiftwidth=3 softtabstop=3
g:ada_abbrev
g:ada_abbrev 布尔型 (存在代表为真)
增加若干缩写。此特性在一定程序上已被各种补全机制所取代。
g:ada_withuse_ordinary
g:ada_withuse_ordinary 布尔型 (存在代表为真)
把 "with" 和 "use" 显示为普通的关键字 (否则,用于引用其它编译
单元时,它们通常会被特殊高亮)。
g:ada_begin_preproc
g:ada_begin_preproc 布尔型 (存在代表为真)
使用 C 预处理命令的色彩来显示所有类 begin 的关键字 (否则,视作
普通的关键字)。
g:ada_omni_with_keywords
g:ada_omni_with_keywords
为 Keywords、Pragmas、Attributes 进行全能补全 ( compl-omni )。
备注: 总可以使用用户定义补全 ( i_CTRL-X_CTRL-U ) 来进行补全。
g:ada_extended_tagging
g:ada_extended_tagging 枚举型 ('jump'、'list')
使用扩展标签,可用如下两个选项之一指定 CTRL-] 的行为
'jump': 使用 tjump 进行标签跳转
'list': 列出所有匹配标签,加到 quick fix 列表。
普通标签不支持函数或操作符重载,因为 C 语言没有这些特性,而标
签功能原本是为 C 开发的。
g:ada_extended_completion
g:ada_extended_completion
为 <C-N> 和 <C-R> 补全 ( i_CTRL-N ) 提供扩展补全。在此模式下,
'.' 被视作标识符的一部分,这样 'Object.Method' 或
'Package.Procedure' 等就能作为一个整体进行补全。
g:ada_gnat_extensions
g:ada_gnat_extensions 布尔型 (存在代表为真)
支持 GNAT 扩展。
g:ada_with_gnat_project_files
g:ada_with_gnat_project_files 布尔型 (存在代表为真)
加入用于 gnat 项目文件的关键字和属性。
g:ada_default_compiler
g:ada_default_compiler 字符串
设置缺省编译器。目前支持 'gnat' 和 'decada'。
"存在" 类型视作布尔型,变量定义时取值为真,变量未定义时为假。设置的变量值本身
无关紧要。
5.2 命令
ft-ada-commands
:AdaRainbow :AdaRainbow
切换用于 '(' 和 ')' 的彩虹颜色 ( g:ada_rainbow_color ) 模式。
:AdaLines :AdaLines
切换行错误 ( g:ada_line_errors ) 的显示。
:AdaSpaces :AdaSpaces
切换空格错误 ( g:ada_space_errors ) 的显示。
:AdaTagDir :AdaTagDir
为当前文件所在目录创建标签文件。
:AdaTagFile :AdaTagFile
为当前文件创建标签文件。
:AdaTypes :AdaTypes
切换标准包类型的 ( g:ada_standard_types ) 高亮。
:GnatFind :GnatFind
调用 g:gnat.Find() 。
:GnatPretty :GnatPretty
调用 g:gnat.Pretty() 。
:GnatTags :GnatTags
调用 g:gnat.Tags() 。
5.3 变量
ft-ada-variables
g:gnat
g:gnat 对象
管理 GNAT 编译的控制对象。当 g:ada_default_compiler 设为
'gnat' 时,在载入首个 Ada 源代码时会创建该对象。详见
gnat_members 。
g:decada
g:decada 对象
管理 Dec Ada 编译的控制对象。当 g:ada_default_compiler 设
为 'decada' 时,在载入首个 Ada 源代码时会创建该对象。详见
decada_members 。
5.4 常数
ft-ada-constants
所有常数都已加锁。详见 :lockvar 。
g:ada#WordRegex
g:ada#WordRegex 字符串
用于搜索 Ada 单词的正则表达式。
g:ada#DotWordRegex
g:ada#DotWordRegex 字符串
用于搜索句号分隔的 Ada 单词的正则表达式。
g:ada#Comment
g:ada#Comment 字符串
用于搜索 Ada 注释的正则表达式。
g:ada#Keywords
g:ada#Keywords 字典列表
包含关键字、属性等的列表,使用全能补全所需格式。详见
complete-items 。
g:ada#Ctags_Kinds
g:ada#Ctags_Kinds 列表字典
包含由 Ctags Ada 支持生成的项目类型 (kind) 的字典。
5.5 函数
ft-ada-functions
ada#Word([{line}, {col}]) ada#Word()
返回光标所在 (或在给定的行/列上) Ada 实体的全名,必要时会删除
空白/换行符。
ada#List_Tag([{line}, {col}]) ada#Listtags()
在 quick-fix 窗口中列出光标所在 (或在给定的行/列上) Ada 实体的
所有出现位置。
ada#Jump_Tag ({ident}, {mode}) ada#Jump_Tag()
在标签跳转列表中列出光标所在 (或在定的行/列上) Ada 实体的所有
出现位置。{mode} 这里可以是 'tjump' 或 'stjump'。
ada#Create_Tags ({option}) ada#Create_Tags()
用 Ctags 创建标签文件。{option} 可设为 'file',用于指定当前文
件,或 'dir',用于指定当前文件所在的目录,也可设为任意文件名。
gnat#Insert_Tags_Header() gnat#Insert_Tags_Header()
添加标签文件头部 (!_TAG_) 信息到当前文件,因为 GNAT XREF 的输
出不会自动包含该项信息。
ada#Switch_Syntax_Option ({option}) ada#Switch_Syntax_Option()
切换高亮选项 {option} 的开与关。本函数用于 Ada 菜单。
gnat#New()
gnat#New ()
创建一个新 gnat 对象。详见 g:gnat 。
6. 附加插件
ada-extra-plugins
可安装以下可选附加插件。它们能与 Ada 模式有效地相互配合,增强 Ada 模式的能力:
backup.vim
http://www.vim.org/scripts/script.php?script_id=1537
自动保存任意多个备份,以备不时之需。
rainbow_parenthsis.vim
http://www.vim.org/scripts/script.php?script_id=1561
因为 Ada 只使用 '(' 和 ')',此插件非常有用。
nerd_comments.vim
http://www.vim.org/scripts/script.php?script_id=1218
提供出色的注释和撤销注释支持,支持几乎所有编程语言。
matchit.vim
http://www.vim.org/scripts/script.php?script_id=39
可用于任何语言的增强 '%' 跳转。正常 '%' 跳转只支持 '{}' 风格的语言。
Ada 模式会设置所需的搜索模式。
taglist.vim
http://www.vim.org/scripts/script.php?script_id=273
提供源代码浏览器侧栏。有 Ada 补丁。
Vim 的 GNU Ada 项目发布 (http://gnuada.sourceforge.net) 已包含上述所有的插件。