filetype

filetype.txt 适用于 Vim 9.2 版本。 最近更新: 2026年4月 VIM 参考手册 by Bram Moolenaar 译者: Willis、tocer 文件类型 filetype file-type 1. 文件类型 filetypes 2. 文件类型插件 filetype-plugins 3. 缺省文件类型插件说明 ftplugin-docs 另见 autocmd.txt

1. 文件类型 filetypes file-types

Vim 能够自动识别正在编辑的文件类型。识别主要通过检查文件名,部分场景下也通过在 文件内容中匹配特定文本完成。 :filetype :filet 要打开文件类型检测,在 vimrc 里加入以下命令: :filetype on 每次编辑新文件或已有文件时,Vim 会尝试自动识别文件类型,并相应设置 'filetype' 选项。同时触发 FileType 事件。用于自动设置语法高亮,修改选项等。 注意: 文件类型功能与 'compatible' 兼容模式无法良好配合。因为 Vi 兼容模式下所有 选项均为全局生效。要使用本功能,建议关闭 'compatible' (假如尚未关闭)。 细节: ":filetype on" 命令会加载以下脚本: Amiga $VIMRUNTIME/filetype.vim Mac $VIMRUNTIME:filetype.vim MS-Windows $VIMRUNTIME\filetype.vim Unix $VIMRUNTIME/filetype.vim VMS $VIMRUNTIME/filetype.vim 该文件是 Vim 脚本,其中定义了 BufNewFile 和 BufRead 事件的自动命令。如 果通过文件名无法检测到文件类型,会继续执行 $VIMRUNTIME/scripts.vim,通 过文件内容进行检测。 GUI 运行时或即将启动时,还会执行 menu.vim 脚本加载菜单。要禁用菜单, 可见 'go-M' 。 要加入自定义文件类型,可见下文 new-filetype 。要查找特定文件类型的帮助,在文 件类型名前加上 "ft-" 前缀以及可选的 "-syntax"、"-indent" 或 "-plugin" 后缀。例 如: :help ft-vim-indent :help ft-vim-syntax :help ft-man-plugin 如果文件类型未被自动识别,或识别错误,可手动设置 'filetype' 选项,或在文件里加 入模式行。例如,要识别为 IDL 文件,可用 :set filetype=idl 或在文件中加入模式行 modeline : /* vim: set filetype=idl : */ :filetype-plugin-on 要打开文件类型特定插件加载: :filetype plugin on 如果尚未打开文件类型检测,先自动开启检测功能 (因为检测到文件类型是前提条件)。 本命令实际会加载 'runtimepath' 里的 "ftplugin.vim" 文件。效果是在编辑文件时, 自动加载对应类型的插件 (如果存在)。 filetype-plugin :filetype-plugin-off 要关闭文件类型特定插件加载: :filetype plugin off 执行后不会自动关闭文件类型检测。但如果手动关闭检测,插件也无法加载。 本命令实际会加载 'runtimepath' 里的 "ftplugof.vim" 文件。 :filetype-indent-on 要打开文件类型特定缩进设置: :filetype indent on 如果尚未打开文件类型检测,先自动开启检测功能 (因为检测到文件类型是前提条件)。 本命令实际会加载 'runtimepath' 里的 "indent.vim" 文件。效果是在编辑文件时,自 动加载对应类型的缩进文件 (如果存在)。 indent-expression :filetype-indent-off 要关闭文件类型特定缩进设置: :filetype indent off 执行后不会自动关闭文件类型检测。但如果手动关闭检测,缩进文件也无法加载。 本命令实际会加载 'runtimepath' 里的 "indoff.vim" 文件。 效果是对后续打开的文件禁用自动缩进。已打开的文件不受影响。要关闭已打开文件的缩 进,可手动复位 'autoindent''cindent''smartindent' 和/或 'indentexpr' :filetype-off 要关闭文件类型检测,可用: :filetype off 不改变插件加载 ("plugin") 和缩进设置 ("indent") 的启用状态,但由于文件类型无法 被识别,相关插件和缩进会暂停生效,直到下次用 `:filetype on` 重新启用检测为止。 相关命令总览: :filetype-overview 命令 检测 插件 缩进 :filetype on 打开 不变 不变 :filetype off 关闭 不变 不变 :filetype plugin on 打开 打开 不变 :filetype plugin off 不变 关闭 不变 :filetype indent on 打开 不变 打开 :filetype indent off 不变 不变 关闭 :filetype plugin indent on 打开 打开 打开 :filetype plugin indent off 不变 关闭 关闭 要查看当前文件类型相关状态,可用: :filetype 输出示例如下: filetype detection:ON plugin:ON indent:OFF 文件类型也用于控制语法高亮。执行 ":syntax on" 命令时,也会自动启用文件类型检 测。无需再额外执行 ":filetype on"。 要禁用某种特定文件类型,可在用户 filetype.vim 文件中添加相应规则。详见 remove-filetype filetype-detect 要手动重新触发文件类型检测: :filetype detect 可先编辑空白文件,输入足够用于文件类型检测的文本 (如在新建外壳脚本中输入解释器 指令行: "#!/bin/csh"),然后执行此命令。 如果文件类型检测处于关闭状态,会先启用检测功能,相当于使用了 "on" 参数。 filetype-overrule 如果同一扩展名对应多种文件类型,Vim 会尝试自动判断,但并非百分百准确。可通过以 下全局变量,为有歧义的扩展名强制指定文件类型: 文件名 变量 *.app g:filetype_app *.asa g:filetype_asa ft-aspperl-syntax ft-aspvbs-syntax *.asm g:asmsyntax ft-asm-syntax *.asp g:filetype_asp ft-aspperl-syntax ft-aspvbs-syntax *.bas g:filetype_bas ft-basic-syntax *.cfg g:filetype_cfg *.cls g:filetype_cls *.csh g:filetype_csh ft-csh-syntax *.dat g:filetype_dat *.def g:filetype_def *.dsp g:filetype_dsp *.f g:filetype_f ft-forth-syntax *.frm g:filetype_frm ft-form-syntax *.fs g:filetype_fs ft-forth-syntax *.h g:c_syntax_for_h ft-c-syntax (已废弃) *.h g:ch_syntax_for_h ft-ch-syntax (已废弃) *.h g:filetype_h ft-c-syntax ft-ch-syntax ft-cpp-syntax *.i g:filetype_i ft-progress-syntax *.inc g:filetype_inc *.int g:filetype_int *.lsl g:filetype_lsl *.m g:filetype_m ft-mathematica-syntax *.mac g:filetype_mac *[mM]makefile,*.mk, .mak,[mM]akefile g:make_flavor ft-make-syntax *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md g:filetype_md ft-pandoc-syntax *.mod g:filetype_mod *.p g:filetype_p ft-pascal-syntax *.pl g:filetype_pl *.pp g:filetype_pp ft-pascal-syntax *.prg g:filetype_prg *.r g:filetype_r *.sig g:filetype_sig *.sql g:filetype_sql ft-sql-syntax *.src g:filetype_src *.sys g:filetype_sys *.sh g:bash_is_sh ft-sh-syntax *.tex g:tex_flavor ft-tex-plugin *.typ g:filetype_typ *.v g:filetype_v *.w g:filetype_w ft-cweb-syntax 以下文件类型仅在无法自动检测时,才使用对应全局变量: *.r g:filetype_r ft-rexx-syntax filetype-ignore 可通过 g:ft_ignore_pat 变量忽略指定类型文件的内容检测。缺省值是: :let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$' 作用是不检测各类压缩文件的内容。 new-filetype 如果需要添加 Vim 暂未支持的文件类型,有四种方法。强烈建议不要修改 $VIMRUNTIME/filetype.vim 文件。升级 Vim 时该文件会被覆盖。 A. 覆盖所有缺省检测规则。 为每种文件类型创建独立配置文件。缺点是需要很多文件。优点是部署简便,将文件 放置在指定目录就可以。 ftdetect 1. 建立用户运行时目录。通常使用 'runtimepath' 选项的首项。并在其中新建 "ftdetect" 目录。Unix 示例: :!mkdir ~/.vim :!mkdir ~/.vim/ftdetect 2. 创建脚本文件,包含检测文件类型的自动命令。示例: au BufRead,BufNewFile *.mine set filetype=mine 注意 无需使用 "augroup" 命令,加载用户脚本时已自动处理。自动命令里也可用 "*" 模式,通过分析文件内容识别类型。 将脚本保存在上述 "ftdetect" 目录下,文件名为 "mine.vim"。Unix 示例: :w ~/.vim/ftdetect/mine.vim 3. 重启 Vim 后生效。 "ftdetect" 目录中的配置在所有缺省检测后加载,因此可覆盖已识别的文件类型。 也可通过 :setfiletype 保留已识别类型,仅添加新类型支持。 B. 先进行缺省检测,再检测自定义文件类型。 和方法 A 类似。但使用 :setfiletype 替代无条件的 `set filetype`。该命令仅 在未检测到文件类型时才会设置,避免覆盖缺省规则。例如: au BufRead,BufNewFile *.txt setfiletype text 也可基于已识别的文件类型二次修改。例如,将已识别的 "pascal" 类型替换为 "mypascal": au BufRead,BufNewFile * if &ft == 'pascal' | set ft=mypascal | endif C. 仅通过文件名检测文件类型。 1. 建立用户运行时目录。通常使用 'runtimepath' 选项的首项。Unix 示例: :!mkdir ~/.vim 2. 创建脚本文件,包含检测文件类型的自动命令。示例: " my filetype file if exists("did_load_filetypes") finish endif augroup filetypedetect au! BufRead,BufNewFile *.mine setfiletype mine au! BufRead,BufNewFile *.xyz setfiletype drawing augroup END 将脚本保存在上述用户运行时目录下,文件名为 "filetype.vim"。Unix 示例: :w ~/.vim/filetype.vim 3. 重启 Vim 后生效。 自定义的 filetype.vim 会在缺省规则之前加载。用户自动命令会先被匹配,而后续 规则会使用 :setfiletype 命令,确保不会覆盖用户设置。 new-filetype-scripts D. 必须通过读取文件内容检测文件类型。 1. 建立用户运行时目录。通常使用 'runtimepath' 选项的首项。Unix 示例: :!mkdir ~/.vim 2. 创建脚本文件,包含检测文件类型的自动命令。示例: if did_filetype() " filetype 已经设立.. finish " ..不需要这些检测 endif if getline(1) =~ '^#!.*\<mine\>' setfiletype mine elseif getline(1) =~? '\<drawing\>' setfiletype drawing endif 更多示例可参考 $VIMRUNTIME/scripts.vim。 将脚本保存在上述用户运行时目录下,文件名为 "scripts.vim"。Unix 示例: :w ~/.vim/scripts.vim 3. 无需重启 Vim,立即生效。 自定义的 scripts.vim 会在缺省规则之前加载,因此用户规则优先于 $VIMRUNTIME/scripts.vim 定义的缺省规则。 remove-filetype 如果缺省文件类型检测有误,可通过自定义 filetype.vim 或 scripts.vim 修正 (具体 方法见上)。可将 'filetype' 设为不存在的类型名,阻止后续规则覆盖: :set filetype=ignored 多用户共享系统中,可将公共配置 (filetype.vim 和 scripts.vim) 写入全局生效的运 行时目录。通过 'runtimepath' 选择可用目录。如果没有合适位置,可在 system-vimrc 里设置 'runtimepath' 添加公开配置目录。切记保留缺省目录。 autocmd-osfiletypes 备注: 由于移除了 RISC OS 支持,该功能代码当前已禁用。将来会基于 'filetype' 选 项重构。 在支持文件类型元数据的系统中,可指定特定文件类型专用的自动命令。 实际类型检测取决于操作系统;详见系统文档。 要在自动命令里使用 osfiletype 检查,需在尖括号内指定以分号连接的类型列表, 示例: :au BufRead *.html,<&faf;HTML> runtime! syntax/html.vim 这会匹配: - 后缀为 ".html" 的文件,或 - 系统类型为 "&faf" 或 "HTML" 的文件,类型的具体含义取决于系统。 未知类型 匹配。 也可同时指定系统类型加上文件模式 (此时要求两者都必须匹配): :au BufRead <&fff>diff* 匹配系统类型为 "&fff" 且文件名以 "diff" 开头的文件。 plugin-details "plugin" 目录可放在 'runtimepath' 选项中任意一个目录下。所有目录下的所有插件都 会被加载。例如,假定命令: set runtimepath 输出为: runtimepath=/etc/vim,~/.vim,/usr/local/share/vim/vim82 那么 Vim 会加载以下目录及其子目录中的所有插件: /etc/vim/plugin/ ~/.vim/plugin/ /usr/local/share/vim/vim82/plugin/ 注意 最后一项是 $VIMRUNTIME 展开后的值。 备注 使用插件管理器或 packages 功能时,'runtimepath' 会包含大量目录。这些插 件各自需要独立的目录,不要直接放入 ~/.vim/plugin。 如果插件未能成功加载,可通过 -V 参数查看 Vim 启动日志排查: vim -V2 有大量信息。其中有一段日志显示插件加载过程。它的开头是: 正在查找 "plugin/**/*.vim",在 ... 中 这样就能查看 Vim 尝试加载的所有插件路径。

2. 文件类型插件 filetype-plugins

打开文件类型特定插件加载 :filetype-plugin-on 后,会自动设置相应选项和映射。 它们都局部于本缓冲区,不会影响其他文件。 文件类型插件的缺省映射可能与自定义映射冲突。可用以下几种方法避免冲突: 1. 设置局部映射前缀 g:maplocalleader (缺省值为反斜杠,与 g:mapleader 相 同)。例如: :let g:maplocalleader = "," 所有使用 <LocalLeader> 前缀的映射现在都会以逗号开头,避免冲突。 详见 <LocalLeader> 。 2. 自定义映射。例如: :map ,p <Plug>MailQuote 需要提前查阅插件说明,了解相应功能与映射字符串。 自定义映射需在插件加载前 (也就是编辑相应类型的任意文件前) 定义。然后,可使 插件跳过缺省映射的安装 (见下)。 no_mail_maps g:no_mail_maps 3. 可通过设置变量,屏蔽特定文件类型的缺省映射。该变量应内含文件类型名。例如 对于 "mail" 文件类型,该变量可能是: :let g:no_mail_maps = 1 no_plugin_maps g:no_plugin_maps 4. 可通过设置变量 g:no_plugin_maps ,屏蔽所有文件类型的缺省映射: :let g:no_plugin_maps = 1 ftplugin-overrule 如果对某个系统文件类型插件不满意,有三种调整方式: 1. 前置自定义设置。 在 'runtimepath' 靠前的目录 (用户运行时目录) 中创建同名文件类型插件。Unix 示例: vim ~/.vim/ftplugin/fortran.vim 可在其中自定义设置和映射。注意,系统插件加载在此之后发生。因此可能会覆盖用 户设置。此时需用方法 2 和 3。 2. 建立插件备份,并进行本地修改。 复制系统插件,存放到 'runtimepath' 靠前的目录 (用户运行时目录)。Unix 示例: cp $VIMRUNTIME/ftplugin/fortran.vim ~/.vim/ftplugin/fortran.vim 这样就可以自由编辑备份插件。通过设置 b:did_ftplugin ,系统插件不会再加 载。缺点是官方插件更新后,需手动重新复制修改。 3. 后置自定义设置。 在 'runtimepath' 靠后的目录 (用户运行时目录的 "after" 子目录) 中创建同名文 件类型插件。Unix 示例: vim ~/.vim/after/ftplugin/fortran.vim 仅修改需要调整的设置。

3. 缺省文件类型插件说明 ftplugin-docs

plugin_exec g:plugin_exec 启用插件执行外部命令的权限。由于历史原因,Perl 文件类型插件 (及其他少数插件) 曾经需要该权限来设置搜索路径。 出于安全考虑,缺省关闭,如需全局打开: :let g:plugin_exec = 1 也可只为特定文件类型打开: :let g:<filetype>_exec = 1 例如,仅为 Ruby 打开: :let g:ruby_exec = 1 同时设置全局变量 plugin_exec 和 文件类型特定变量 <filetype>_exec 时,文件 类型特定变量优先。 ASCIIDOC ft-asciidoc-plugin 要打开 folding : let g:asciidoc_folding = 1 要关闭标头折叠的嵌套: let g:asciidoc_foldnested = 0 要关闭标题下方所有内容的折叠: let asciidoc_fold_under_title = 0 ARDUINO ft-arduino-plugin 根据 Arduino IDE 的缺省设置,缺省设置以下选项: setlocal expandtab tabstop=2 softtabstop=2 shiftwidth=2 要关闭推荐风格,可在 vimrc 里设置以下变量: let g:arduino_recommended_style = 0 AWK ft-awk-plugin 要打开 GNU Awk 特定功能,如 @include 支持: :let g:awk_is_gawk = 1 CHANGELOG ft-changelog-plugin 可在变更日志文件中快速录入变更条目。内置实用命令、映射和变量,可供自定义调整: 选项: 'comments' 清空该选项,避免注释规则打乱文件排版。 'textwidth' 设为 78,这是变更日志标准值。 'formatoptions' 增加 't' 标志位,插入文本时自动回绕。 内置命令: NewChangelogEntry 智能新增变更条目 (见下)。 局部映射: <Leader>o 智能新增变更条目 (见下)。 全局映射: 注意: 需先加载 ftplugin/changelog.vim 脚本才能启用全局 映射。为此,可在 .vimrc 里加入: runtime ftplugin/changelog.vim <Leader>o 当前文件对应的变更日志 (见下 b:changelog_path ) 存在 时,如果该文件已打开,切换到相应缓冲区,否则新建缓冲区 编辑该文件。随后在该文件上执行上述局部映射 <Leader>o。 变量: g:changelog_timeformat 已废弃;请改用 g:changelog_dateformat 。 g:changelog_dateformat 变更日期段使用的日期 (含时间) 显示格式。使用 strftime() 函数相同的语法。 缺省值是 "%Y-%m-%d",为各类变更日志通用标准格式。 g:changelog_username 设置用户名和邮箱地址。 缺省自动从环境变量和系统文件读取。优先读取 /etc/passwd 的当前用户备注部分。依据非正式惯例,该项首个逗号前分隔 的部分包含了用户全名,备选方案是用 $NAME 环境变量作为 用户全名。如果仍然为空,最后会使用当前用户的大写形式作 为全名。然后运行 whoamihostname 构造邮箱地址。 最终形式是 全名 <用户名@主机名> g:changelog_new_date_format 新建日期段时所用格式。支持以下特殊占位符: %% 插入单个 '%' 号 %d 插入日期,使用上述格式 %u 插入用户,使用上述格式 %p 插入 b:changelog_entry_prefix 值 %c 完成后光标停留位置 缺省值是 "%d %u\n\n\t* %p%c\n\n",生成效果是 |2003-01-14 全名 <用户名@主机名> | | * 前缀| (结尾的 '|' 代表光标键会停留的位置,行首的 '|' 代表一 行开始) g:changelog_new_entry_format 新建条目时所用格式。支持以下特殊点位符: %p 插入 b:changelog_entry_prefix 值 %c 完成后光标停留位置 缺省值是 "\t*%c",生成效果是 | * 前缀| g:changelog_date_entry_search 匹配日期段时所用的搜索模式。可使用 g:changelog_new_date_format 支持的所有特殊点位符。 缺省值是 '^\s*%d\_s*%u',它能找到匹配如下形式的行 |2003-01-14 全名 <用户名@主机名> 及类似格式。 g:changelog_date_end_entry_search 匹配日期段结束位置所用的搜索模式。可使用 g:changelog_new_date_format 支持的所有特殊点位符。 缺省值是 '^\s*$',以空行或空白行作为段结束标识。 b:changelog_name b:changelog_name 查找的变更日志文件名。缺省值是 'ChangeLog'。 b:changelog_path 当前缓冲区对应的变更日志路径。缺省为空,此时查找当前缓 冲区所在目录下名为 b:changelog_name 的文件。如果未找 到,则逐级向上遍历上级目录,直到找到文件或抵达根目录为 止。 b:changelog_entry_prefix 指定生成新前缀的函数名。该函数不接受参数,返回前缀字符 串。空串为合法前缀。 缺省逻辑是自动计算变更日志路径与当前缓冲区路径之间的最 短相对路径。将来会考虑支持此变量的全局变量版本。 插入变量日志条目时,会自动选择最佳位置,使插入文本最短。先确定当前日期和用户, 然后在变更日志文件中搜索同日期、同用户的日期段,如有,则在该段下追加新条目。否 则,在日志文件开头新建日期段并写入条目。 FORTRAN ft-fortran-plugin 选项: 'expandtab' 打开,Fortran 标准要求不应出现制表字符。用户可在 .vimrc 文件里设置 g:fortran_have_tabs 变量强制关闭。 'textwidth' 固定宽度源码设为 80,自由格式则相应设为 132。可通过设置 g:fortran_extended_line_length 变量,将固定宽度格式的行宽也 提升到 132。 'formatoptions' 设为自动断行代码行。保留注释行长行,但可用 gq 排版注释。 g:fortran_have_tabs 及用于检测源码格式的方法,详见 ft-fortran-syntax 。 FREEBASIC ft-freebasic-plugin 此插件旨在将 FreeBASIC 的四种方言: "fb"、"qb"、"fblite" 和 "deprecated" 当作独 立的语言类型分别处理。 方言的判断算法为: 使用 g:freebasic_forcelang 、待编辑文件中的 #lang 指令或 $lang 宏命令和 g:freebase_lang 中首个可用值。这些全局变量在逻辑上对应 fbc 编 辑器的 -forcelang 和 -lang 选项。未显式指定则默认使用 "fb" 方言。 例如,缺省方言设为 "fblite",但允许文件内的 #lang 指令覆盖缺省值,则可用: let g:freebasic_lang = "fblite" GDSCRIPT ft-gdscript-plugin 根据 Godot 官方文档,缺省设置以下选项: setlocal noexpandtab softtabstop=0 shiftwidth=0 要关闭推荐风格,可在 vimrc 里设置以下变量: let g:gdscript_recommended_style = 0 GIT COMMIT ft-gitcommit-plugin 内置 :DiffGitCached 命令,用于在预览窗口中显示当前提交的差异内容。等价于 "git diff --cached" 加上此命令提供的参数。 提交消息的首行长度 (用于语法高亮) 可通过 g:gitcommit_summary_length 配置。缺 省值为 50。示例: let g:gitcommit_summary_length = 70 GIT REBASE ft-gitrebase-plugin gitrebase 文件类型定义以下缓冲区局部命令,方便辅助交互式 `git rebase` 操作: :Drop " 放弃当前提交 :Edit " 暂停并编辑当前提交 :Fixup " 和上一个提交合并 (squash) (但放弃当前提交的消息部分) :Pick " 保留光标所在的当前提交 :Reword " 保留当前提交,但修改提交消息 :Squash " 和上一个提交合并 (squash) 此外,可用以下命令在上述操作间循环: :Cycle " 在上述操作间循环 :Cycle 命令也已映射到 CTRL-ACTRL-X 键。 详见 `git-rebase --help`。 GLEAM ft-gleam-plugin 根据 gleam 的官方推荐风格,缺省设置以下选项: setlocal expandtab shiftwidth=2 softtabstop=2 要关闭推荐风格,可在 vimrc 里设置以下变量: let g:gleam_recommended_style = 0 GO ft-go-plugin 根据 Golang 官方文档,缺省设置以下选项: setlocal noexpandtab softtabstop=0 shiftwidth=0 要关闭推荐风格,可在 vimrc 里设置以下变量: let g:go_recommended_style = 0 GPROF ft-gprof-plugin gprof 文件类型插件将 <C-]> 映射为函数索引跳转: 从平面概要 (flat profile) 或调 用关系图 (call graph) 里的函数项跳转到调用关系图里的函数详细信息。 要关闭该映射: let g:no_gprof_maps = 1 HARE ft-hare 该插件的帮助文档相当长,因此单独列出: ft_hare.txt . HTML ft-html-plugin 标签折叠存在不少难点。 blockquote 等元素必须成对使用开始和结束标签;而 p 等 元素在特定场景可省略结束标签; hr 等空元素则不使用结束标签。省略结束标签的判 定规则相当繁琐特殊 [0],且仅作用于当前作用域。假定语法完全合乎规则,结束标签会 在当前作用域内,反向匹配到离自身最近的开始标签 [1],构成用于折叠的标签对。为此 目的,忽略行内标签对 (因为行内折叠无意义),同时丢弃标签对间其他未平衡的开始标 签。开启语法高亮后,可通过表达式折叠方法 fold-expr 打开标签折叠: let g:html_expr_folding = 1 缺省,每次 TextChangedInsertLeave 事件发生后都会重新计算标签折叠。大文 件频繁重算会影响性能,要关闭自动重算: let g:html_expr_folding_without_recomputation = 1 doautocmd FileType 要强制手动重算,可用: unlet! b:foldsmap normal zx [0] https://html.spec.whatwg.org/multipage/syntax.html#optional-tags [1] https://en.wikipedia.org/wiki/Dangling_else IDRIS2 ft-idris2-plugin 缺省使用以下选项: setlocal shiftwidth=2 tabstop=2 expandtab setlocal comments=s1:{-,mb:-,ex:-},:\|\|\|,:-- setlocal commentstring=--\ %s setlocal wildignore+=*.ibc 要使用制表缩进而非空格,可在 vimrc 里设置变量: let g:idris2#allow_tabchar = 1 JAVA ft-java-plugin 可定义变量 g:ftplugin_java_source_path ,并赋值为 ".jar" 或 ".zip" 归档路径, 如: let g:ftplugin_java_source_path = '/path/to/src.jar' let g:ftplugin_java_source_path = '/path/to/src.zip' 加载 zip 插件后,可先通过 gf 命令打开归档,然后按 n 命令检索光标所在类的 源文件,最后按 <Return> 键载入选中文件。 注意 加载 Zip 插件后,缓冲区 执行 gf 命令的效果取决于 Zip 插件版本。部分 旧版 Zip 插件不支持 Jar 格式,可将 Jar 归档文件符号链接到 ".zip" 扩展名文件, 并将后者赋给本变量。 否则 (译者注: 指赋值为非归档文件时),本变量应指向源码目录,此时该路径会被加到 'path' 选项本地值的开头,相当于: let g:ftplugin_java_source_path = $JDK_SRC_PATH let &l:path = g:ftplugin_java_source_path .. ',' .. &l:path 此时 gf 命令就可从光标所在完全限定类型名上,根据 'path' 寻找并打开源文件。 记住修改变量后,在 Java 文件缓冲区需要手动触发 FileType 事件才能生效: doautocmd FileType markdown 文档注释在注释标记 ( /// ) 后为了美观,常用统一前置纵向空白排版;但在 markdown 文档里,水平引导空白串有标识代码块的功能。插件为 gq 操作符内置了一 种 'formatexpr' 函数,可用于按需重排 markdown 文档注释: setlocal formatexpr=g:javaformat#RemoveCommonMarkdownWhitespace() 低于 7.4.265 的 Vim 旧版,可用: setlocal formatexpr=javaformat#RemoveCommonMarkdownWhitespace() 定义 g:java_ignore_javadocg:java_ignore_markdown 可关闭此功能。 此函数接受行范围,在该范围内批量删除统一的前置纵向空白,然后重排文本。取决于编 写风格和注释内容,可按需选取整段或局部注释进行排版。 8.2.1397 及以上版本上,要在删除 g:java_ignore_markdowng:java_ignore_javadoc 变量后重新启用 markdown 注释识别,需手动重新执行 "javaformat.vim": runtime autoload/javaformat.vim JSON-FORMAT ft-json-plugin 可扩展 JSON 文件类型,将 'formatexpr' 设为 "json.FormatExpr()" 函数,通过 gq 格式化 JSON。 可在 $HOME/.vim/ftplugin/json.vim 里加入: vim9script import autoload 'dist/json.vim' setl formatexpr=json.FormatExpr() LUA ft-lua-plugin g:lua_folding 要打开使用表达式折叠方法 fold-expr 的 Lua 函数折叠: let g:lua_folding = 1 g:lua_version g:lua_subversion Lua 文件类型插件定义的 'includeexpr'ft-lua-syntax 高亮使用全局变量 g:lua_versiong:lua_subversion 来决定使用的 Lua 版本 (缺省为 5.3)。 例如,要用 Lua 5.1 版本: let g:lua_version = 5 let g:lua_subversion = 1 MAIL ft-mail-plugin 选项: 'modeline' 被关闭,以避免特洛伊木马风险。并防止含有 "Vim:" 字样的标题行引 发错误信息。 'textwidth' 设为 72。电邮推荐格式。 'formatoptions' 设为自动断行普通文本,并在新行里重复注释前导符,使引用行 (翻译 为注释) 开头的 ">" 可以自动延续。也可用 gq 排版引用文本。 局部映射: <LocalLeader>q 或 <Plug>MailQuote 对可视模式下的选中文本,或普通模式下从光标位置到文件末的文本添加引用标 记,即在每行开头插入 "> "。 MAN ft-man-plugin :Man :ManReload man.vim 本插件以友好方式显示手册页。详见用户手册中 find-manpage 一节。 要在调入任何手册页之前就能使用 :Man 命令,可在 vimrc 文件里放入: runtime ftplugin/man.vim 选项: 'iskeyword' 加入 '.' 字符,以便 CTRL-] 访问带 '.' 的手册页名。 命令: Man {name} 在窗口里显示 {name} 的手册页 (缺省使用水平分割) Man {number} {name} 显示指定章节 {number}{name} 的手册页。 ManReload 重新加载可用手册页缓存,用于 :Man 参数补全。 全局映射: <Leader>K 显示光标所在单词的手册页。 <Plug>ManPreGetPage 同上,可用于自定义映射: nmap <F1> <Plug>ManPreGetPage<CR> 局部映射: <Plug>ManBS <LocalLeader>h 清除缓冲区里的退格符 <BS>CTRL-] 跳转到光标所在单词的手册页。 CTRL-T 跳回上个手册页。 要关闭映射: let g:no_man_maps = 1 要使用垂直分割而非水平分割: let g:ft_man_open_mode = 'vert' 要使用新标签页打开: let g:ft_man_open_mode = 'tab' 要打开折叠: let g:ft_man_folding_enable = 1 可通过 autocommand 自定义折叠风格。例如: autocmd FileType man setlocal foldmethod=indent foldenable 要使 :Man {number} {name} 与系统命令 "man {number} {name}" 行为一致,如果找不 到指定章节的手册页,不会查找默认章节 (相当于 "man {name}") 作为后备: let g:ft_man_no_sect_fallback = 1 g:ft_man_implementation :Man 命令补全会自动识别系统所用的手册页实现。如果识别有误,可手动将变量 g:ft_man_implementation 设为以下的值之一: 'man-db' https://man-db.nongnu.org/ '' 识别失败,回退到外壳命令补全,而非手册页补全。 可设置 'keywordprg',使 K 命令在 Vim 窗口打开手册页: set keywordprg=:Man MANPAGER manpager.vim 可通过 :Man 命令将 Vim 设为手册浏览器,优点包括支持手册页语法高亮,还可按 CTRL-] 跳转到关联手册页。 对 bash、zsh、ksh 或 dash,可在对应配置文件 (.bashrc、.zshrc、…) 加入 export MANPAGER="vim +MANPAGER --not-a-term -" 对 (t)csh,可加入 setenv MANPAGER "vim +MANPAGER --not-a-term -" 对 fish,可加入 set -x MANPAGER "vim +MANPAGER --not-a-term -" MARKDOWN ft-markdown-plugin 要打开折叠: let g:markdown_folding = 1 缺省风格为置位 'expandtab'。要关闭推荐风格: let g:markdown_recommended_style = 0 ORG ft-org-plugin 要打开折叠: let g:org_folding = 1 PDF ft-pdf-plugin 提供 <C-]> 和 <C-T> 映射,模拟标签栈,用于 PDF 内跳转。以下内容视为标签: - "startxref" 后指向 xref (交叉引用表) 的字节位移 - 文件尾部中 /Prev 键后指向之前 xref (历史引用表) 的字节位移 - xref 表中形如 "0123456789 00000 n" 的条目行 - PDF 任意位置上形如 "1 0 R" 的对象引用 要关闭映射 :let g:no_pdf_maps = 1 PLSQL ft-plsql-plugin 要打开 PL/SQL 文件类型的语法折叠,可设置以下变量: :let g:plsql_fold = 1 PYTHON ft-python-plugin PEP8 遵循 PEPB 规范,缺省设置以下选项: setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8 要关闭推荐风格,可在 vimrc 里设置变量: let g:python_recommended_style = 0 QF QUICKFIX qf.vim ft-qf-plugin "qf" 文件类型用于快速修复窗口,见 quickfix-window 。 插件缺省会在 status-line 中显示生成快速修复列表的相关命令。要关闭此设置,可 用: :let g:qf_disable_statusline = 1 R MARKDOWN ft-rmd-plugin 缺省不加载 HTML 处理 (ftplugin/html.vim)。如果需要,可在 vimrc 中加入: let g:rmd_include_html = 1 'formatexpr' 值会根据 R 代码和 markdown 代码区段自动切换注释排版设置。要关闭此 功能,可在 vimrc 中加入: let g:rmd_dynamic_comments = 0 R RESTRUCTURED TEXT ft-rrst-plugin 'formatexpr' 值会根据 R 代码和 ReStructured 代码区段自动切换注释排版设置。要关 闭此功能,可在 vimrc 中加入: let g:rrst_dynamic_comments = 0 RESTRUCTUREDTEXT ft-rst-plugin 可选的排版设置 (缺省不加载): setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8 要打开推荐风格,可在 vimrc 中设置以下变量: let g:rst_style = 1 RNOWEB ft-rnoweb-plugin 'formatexpr' 值会根据 R 代码和 Latex 代码区段自动切换注释排版设置。要关闭此功 能,可在 vimrc 中加入: let g:rnw_dynamic_comments = 0 RPM SPEC ft-spec-plugin 该插件的帮助文档相当长,因此单独列出: pi_spec.txt 。 RUST ft-rust 该插件的帮助文档相当长,因此单独列出: ft_rust.txt 。 SQL ft-sql 该插件的帮助文档相当长,因此单独列出: ft_sql.txt 。 TEX ft-tex-plugin g:tex_flavor 如果 *.tex 文件的首行格式为 %&<format> 将据此判定文件类型: plaintex (纯 TeX)、context (ConTeXt)、或 tex (LaTeX)。否 则,会通过在文件里搜索关键字判定文件类型是 context 还是 tex。没有匹配关键字则 缺省视为 plaintex。可通过定义变量 g:tex_flavor 来手动设置格式 (注意格式会自 动翻译为文件类型,但两者用值不同)。可选格式为: let g:tex_flavor = "plain" let g:tex_flavor = "context" let g:tex_flavor = "latex" 目前仅支持以上三种格式。 TYPST ft-typst-plugin g:typst_conceal 本变量为 TRUE 时,'conceallevel' 选项会设为 2。 g:typst_folding 本变量为 TRUE 时,开启标题折叠。(缺省: FALSE ) 要打开本变量: let g:typst_folding = 1 g:typst_foldnested 本变量为 TRUE 时,开启标题嵌套折叠。(缺省: TRUE ) 要关闭本变量 (嵌套标题和父标题使用相同折叠级别): let g:typst_foldnested = 0 VIM ft-vim-plugin Vim 文件类型插件内置下列映射: [[ 跳转到前一函数的开始处 ]] 跳转到后一函数的开始处 ][ 跳转到前一函数的结束处 [] 跳转到后一函数的结束处 ]" 跳转到后一处 (老式) 注释 [" 跳转到前一处 (老式) 注释 gf 编辑光标所在文件 CTRL-W gf 在新标签页里编辑光标所在文件 CTRL-W f 在新窗口里编辑光标所在文件 要关闭映射: let g:no_vim_maps = 1 YAML ft-yaml-plugin 缺省打开以下选项: setlocal shiftwidth=2 softtabstop=2 要关闭推荐风格,可设置以下变量: let g:yaml_recommended_style = 0 ZIG ft-zig-plugin g:zig_recommended_style 根据 Zig 推荐风格 (https://ziglang.org/documentation/master/),缺省使用以下缩 进选项: setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8 要关闭推荐风格,可把 g:zig_recommended_style 设为 0: let g:zig_recommended_style = 0 g:zig_std_dir 本变量指定 Zig 标准库路径。插件会读取 g:zig_std_dir 并追加到 'path' 后,用于 查找 Zig 文件。Zig 标准库位置取决于系统和安装方法。 可通过 `zig env` 外壳命令自动设置 g:zig_std_dir : let g:zig_std_dir = json_decode(system('zig env'))['std_dir'] 可将此命令写入 FileType 自动命令 :autocmd 或用户 ftplugin ,仅在加载 Zig 文 件时执行。 ZIMBU ft-zimbu-plugin 提供 [[]] 映射,快速跳转到函数开头和结尾。 要关闭映射: let g:no_zimbu_maps = 1 vim:tw=78:ts=8:noet:ft=help:norl: