文件类型

Nvim :help 页面,生成源代码 使用 tree-sitter-vimdoc 解析器。


文件类型 file-type
另请参阅 autocmd.txt

1. 文件类型 filetypes file-types

Vim 可以检测正在编辑的文件的类型。这可以通过检查文件名,有时还可以通过检查文件的内容以查找特定文本来完成。
:filetype :filet 要启用文件类型检测,请在您的 vimrc 中使用此命令
:filetype on
每次编辑新文件或现有文件时,Vim 都会尝试识别文件的类型并设置 'filetype' 选项。这将触发 FileType 事件,可用于设置语法高亮、设置选项等。
详情:":filetype on" 命令将加载以下文件:$VIMRUNTIME/filetype.lua $VIMRUNTIME/filetype.vim filetype.lua 创建一个针对所有 BufNewFile 和 BufRead 事件触发的自动命令。它尝试根据文件的扩展名或名称检测文件类型。
filetype.vim 是一个 Vim 脚本,它为 BufNewFile 和 BufRead 事件定义自动命令。与 filetype.lua 相比,此文件为每个文件类型模式创建单独的 BufNewFile 和 BufRead 事件。
如果文件类型未通过名称找到,则使用文件 $VIMRUNTIME/scripts.vim 从文件内容中检测文件类型。当 GUI 正在运行或即将启动时,还会加载 menu.vim 脚本。
要添加您自己的文件类型,请参见下面的 new-filetype。要搜索有关文件类型的帮助,请在前面加上 "ft-",并可选择在后面加上 "-syntax"、"-indent" 或 "-plugin"。例如
:help ft-vim-indent
:help ft-vim-syntax
:help ft-man-plugin
如果文件类型未自动检测到,或者检测到的类型不正确,您可以手动设置 'filetype' 选项,或者在您的文件中添加模式行。例如,对于 IDL 文件,请使用以下命令
:set filetype=idl
或将此 模式行 添加到文件
/* 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 on on 未改变 未改变 :filetype off off 未改变 未改变 :filetype plugin on on on 未改变 :filetype plugin off 未改变 off 未改变 :filetype indent on on 未改变 on :filetype indent off 未改变 未改变 off :filetype plugin indent on on on on :filetype plugin indent off 未改变 off off
要查看当前状态,请键入
:filetype
输出类似于以下内容
filetype detection:ON  plugin:ON  indent:OFF
文件类型也用于语法高亮。如果使用 ":syntax on" 命令,也会安装文件类型检测。没有必要在 ":syntax on" 之后执行 ":filetype on"。
要禁用其中一个文件类型,请在您的文件类型文件中添加一行,请参见 remove-filetype
filetype-detect
要再次检测文件类型,请使用以下命令
:filetype detect
如果您从空文件开始并键入了可以检测文件类型的文本,请使用此命令。例如,当您在 shell 脚本中输入以下内容时:"#!/bin/csh"。当文件类型检测关闭时,它将首先启用,就像使用了 "on" 参数一样。
filetype-overrule
当同一扩展名用于多个文件类型时,Vim 会尝试猜测文件的类型。这并不总是有效。可以使用一些全局变量来覆盖用于某些扩展名的文件类型
文件名 变量
*.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 *.i g:filetype_i ft-progress-syntax *.inc g:filetype_inc *.lsl g:filetype_lsl *.m g:filetype_m ft-mathematica-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.filetype.add() 将其添加到 Nvim 的内置文件类型检测机制中。如果您想手动处理检测,请执行以下操作
A. 如果您要覆盖所有默认文件类型检查。这是通过为每个文件类型编写一个文件来实现的。缺点是可能存在很多文件。优点是可以将此文件直接放到正确的目录中以使其工作。ftdetect
1. 创建您的用户运行时目录。通常情况下,您将使用 'runtimepath' 选项的第一个条目。然后,在其中创建目录 "ftdetect"。Unix 的示例
:!mkdir -p ~/.config/nvim/ftdetect
2. 创建一个包含用于检测文件类型的自动命令的文件。示例
au BufRead,BufNewFile *.mine                set filetype=mine
请注意,没有 "augroup" 命令,这在加载您的文件时已经完成。您也可以使用模式 "*",然后检查文件的内容以识别它。将此文件作为 "mine.vim" 写入您的用户运行时目录中的 "ftdetect" 目录。例如,对于 Unix
:w ~/.config/nvim/ftdetect/mine.vim
3. 要使用新的文件类型检测,您必须重新启动 Vim。
"ftdetect" 目录中的文件在所有默认检查之后使用,因此它们可以覆盖先前检测到的文件类型。但是,您也可以使用 :setfiletype 来保留先前检测到的文件类型。
B. 如果您希望在默认文件类型检查之后检测您的文件。
这与上面的 A 相似,但不是无条件地设置 'filetype',而是使用 ":setfiletype"。这只会设置 'filetype',前提是尚未检测到任何文件类型。示例
au BufRead,BufNewFile *.txt                setfiletype text
您也可以在命令中使用已检测到的文件类型。例如,要在检测到 "pascal" 时使用文件类型 "mypascal"
au BufRead,BufNewFile *                if &ft == 'pascal' | set ft=mypascal
                                                               | endif
C. 如果您的文件类型可以通过文件名或扩展名来检测。1. 创建您的用户运行时目录。通常情况下,您将使用 'runtimepath' 选项的第一个条目。Unix 的示例
:!mkdir -p ~/.config/nvim
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 ~/.config/nvim/filetype.vim
3. 要使用新的文件类型检测,您必须重新启动 Vim。
您的 filetype.vim 将在安装默认 FileType 自动命令之前加载。您的自动命令将首先匹配,":setfiletype" 命令将确保在此之后没有其他自动命令设置 'filetype'new-filetype-scripts
D. 如果您的文件类型只能通过检查文件内容来检测。
1. 创建您的用户运行时目录。通常情况下,您将使用 'runtimepath' 选项的第一个条目。Unix 的示例
:!mkdir -p ~/.config/nvim
2. 创建一个用于执行此操作的 vim 脚本文件。示例
if did_filetype()        " filetype already set..
  finish                " ..don't do these checks
endif
if getline(1) =~ '^#!.*\<mine\>'
  setfiletype mine
elseif getline(1) =~? '\<drawing\>'
  setfiletype drawing
endif
请参见 $VIMRUNTIME/scripts.vim 获取更多示例。将此文件作为 "scripts.vim" 写入您的用户运行时目录。例如,对于 Unix
:w ~/.config/nvim/scripts.vim
3. 检测将立即生效,无需重新启动 Vim。
您的 scripts.vim 在默认文件类型检查之前加载,这意味着您的规则将覆盖 $VIMRUNTIME/scripts.vim 中的默认规则。
remove-filetype
如果检测到的文件类型不适合您,您可以将 'filetype' 设置为不存在的名称,例如 ignored,以避免它在以后被设置。
g:did_load_filetypes
可以通过设置 did_load_filetypes 全局变量来禁用 Nvim 提供的内置文件类型检测。如果此变量存在,则默认的 $VIMRUNTIME/filetype.lua 将不会运行。
plugin-details
"plugin" 目录可以位于 'runtimepath' 选项中的任何目录中。所有这些目录都将被搜索以查找插件,并且它们都会被加载。例如,如果此命令
set runtimepath
产生以下输出
runtimepath=/etc/vim,~/.config/nvim,/usr/local/share/vim/vim82
那么 Vim 将加载以下目录和子目录中的所有插件
/etc/vim/plugin/
~/.config/nvim/plugin/
/usr/local/share/vim/vim82/plugin/
请注意,最后一个是 $VIMRUNTIME 的值,该值已展开。
请注意,当使用插件管理器或 时,将向 'runtimepath' 添加许多目录。这些插件都要求有自己的目录,不要将它们直接放在 ~/.config/nvim/plugin 中。
如果您的插件似乎没有加载,您可以使用 -V 参数来查看 Vim 启动时发生了什么。
vim -V2
您将看到很多消息,其中包含关于加载插件的备注。它以以下内容开头
在以下目录中搜索 "plugin/**/*.vim"
在这里您可以看到 Vim 在哪里寻找您的插件脚本。

2. 文件类型插件 filetype-plugins

当启用加载文件类型插件时 :filetype-plugin-on,将设置选项并定义映射。这些都是特定于缓冲区的,不会用于其他文件。
为文件类型定义映射可能会干扰您自己定义的映射。有几种方法可以避免这种情况:1. 将 "maplocalleader" 变量设置为您希望映射以其开头的键序列。例如
:let maplocalleader = ","
然后所有映射将以逗号开头,而不是默认的斜杠。另请参阅 <LocalLeader>
2. 定义您自己的映射。例如
:map ,p <Plug>MailQuote
您需要查看下面插件文件的描述,了解它提供的功能和映射到它的字符串。您需要在插件加载之前(在编辑该类型文件之前)定义您自己的映射。然后插件将跳过安装默认映射。 no_mail_maps g:no_mail_maps 3. 通过设置包含文件类型名称的变量,禁用为特定文件类型定义映射。对于 "mail" 文件类型,这将是
:let no_mail_maps = 1
no_plugin_maps g:no_plugin_maps 4. 通过设置变量,禁用为所有文件类型定义映射
:let no_plugin_maps = 1
ftplugin-overrule
如果全局文件类型插件没有完全按照您的意愿执行,有三种方法可以更改它
1. 添加一些设置。您必须在 'runtimepath' 中较早的目录中创建一个新的文件类型插件。例如,对于 Unix,您可以使用此文件
vim ~/.config/nvim/ftplugin/fortran.vim
您可以设置您想要添加的那些设置和映射。请注意,全局插件将在此之后加载,它可能会覆盖您在此处进行的设置。如果是这种情况,您需要使用以下两种方法之一。
2. 复制插件并更改它。您必须将副本放在 'runtimepath' 中较早的目录中。例如,对于 Unix,您可以执行以下操作
cp $VIMRUNTIME/ftplugin/fortran.vim ~/.config/nvim/ftplugin/fortran.vim
然后您可以根据自己的喜好编辑复制的文件。由于 b:did_ftplugin 变量将被设置,因此不会加载全局插件。这种方法的一个缺点是,当分发的插件得到改进时,您将不得不再次复制和修改它。
3. 在加载全局插件后覆盖设置。您必须在 'runtimepath' 末尾的目录中创建一个新的文件类型插件。例如,对于 Unix,您可以使用此文件
vim ~/.config/nvim/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 特定变量都被设置,则文件类型特定变量应该优先。
要启用 折叠,请使用此命令
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

允许在 Changelog 文件中轻松输入 Changelog 条目。有一些命令、映射和变量值得探索
选项:'comments' 被清空,以避免弄乱格式。'textwidth' 设置为 78,这是标准的。'formatoptions' 添加了 't' 标志,以便在插入文本时换行。
命令:NewChangelogEntry 以智能的方式添加新的 Changelog 条目(见下文)。
本地映射:<Leader>o 以同样智能的方式启动新的 Changelog 条目(见下文)。
全局映射: 注意: 全局映射可以通过先源 ftplugin/changelog.vim 文件来访问,例如使用
runtime ftplugin/changelog.vim
在您的 init.vim 中。<Leader>o 切换到为当前目录打开的 ChangeLog 缓冲区,或者如果它存在于当前目录中,则在新的缓冲区中打开它。然后它执行与上面描述的本地 <Leader>o 相同的操作。
变量:g:changelog_timeformat 已弃用;请改用 g:changelog_dateformat。g:changelog_dateformat Changelog 条目中使用的日期(和时间)格式。接受的格式与 strftime() 函数的格式相同。默认值为 "%Y-%m-%d",这是许多 Changelog 布局的标准格式。g:changelog_username 用户的姓名和电子邮件地址。默认值是从环境变量和系统文件中推断出来的。它搜索 /etc/passwd 以获取当前用户的注释部分,该部分非正式地包含用户的真实姓名,直到第一个分隔逗号。然后它检查 $NAME 环境变量,最后运行 whoamihostname 来构建电子邮件地址。最终形式为
Full Name  <user@host>
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  Full Name  <user@host>
|
|        * prefix|
g:changelog_new_entry_format 创建新条目时使用的格式。下表描述了字符串中的特殊标记:%p 插入 b:changelog_entry_prefix 的结果 %c 完成时将光标定位在何处 默认值为 "\t*%c",它会生成类似于以下内容的内容
|        * prefix|
g:changelog_date_entry_search 搜索日期条目时要使用的搜索模式。与 g:changelog_new_date_format 相同的标记也可以在这里使用。默认值为 '^\s*%d\_s*%u',它会找到与以下形式匹配的行
|2003-01-14  Full Name  <user@host>
以及一些类似的格式。
g:changelog_date_end_entry_search 搜索日期条目结束时要使用的搜索模式。与 g:changelog_new_date_format 相同的标记也可以在这里使用。默认值为 '^\s*$',它会找到仅包含空格或完全为空的行。
b:changelog_name b:changelog_name
要查找的 ChangeLog 文件的名称。默认值为 'ChangeLog'。
b:changelog_path 用于当前缓冲区的 ChangeLog 的路径。默认值为空,因此在与当前缓冲区相同的目录中查找名为 b:changelog_name 的文件。如果找不到,则搜索当前缓冲区的父目录。这将递归地继续,直到找到文件或没有更多父目录要搜索。
b:changelog_entry_prefix 要调用的函数的名称,以生成新条目的前缀。此函数不带任何参数,应返回包含前缀的字符串。返回空前缀是可以的。默认值生成 ChangeLog 的路径名和当前缓冲区的路径名之间的最短路径。将来,也可以将其他变量上下文用于此变量,例如,g:。
Changelog 条目将插入到添加最少文本的位置。在确定当前日期和用户之后,将搜索该文件以查找以当前日期和用户开头的条目,如果找到,则在它下面添加另一个条目。如果找不到,则将新的条目和条目添加到 Changelog 的开头。
选项:'expandtab' 被打开以避免使用 Fortran 标准要求的制表符,除非用户在 vimrc 中设置了 fortran_have_tabs。'textwidth' 设置为 80 用于固定源格式,而设置为 132 用于自由源格式。设置 fortran_extended_line_length 变量会将固定源格式的宽度增加到 132。'formatoptions' 设置为中断代码和注释行,并保留长行。您可以使用 gq 格式化注释。有关 fortran_have_tabs 和用于检测源格式的方法的进一步讨论,请参阅 ft-fortran-syntax
此插件旨在将四种 FreeBASIC 方言,“fb”、“qb”、“fblite” 和 “deprecated”,视为不同的语言。
方言将被设置为在 g:freebasic_forcelang、文件中任何 #lang 指令或 $lang 元命令、或最后 g:freebasic_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" 以及传递给命令的任何参数。
默认情况下,将根据 Golang 官方文档设置以下选项
setlocal noexpandtab softtabstop=0 shiftwidth=0
要禁用此行为,请在您的 vimrc 中设置以下变量
let g:go_recommended_style = 0

GPROF ft-gprof-plugin

gprof 文件类型插件定义了一个映射 <C-]>,用于从 gprof 平面配置文件中的函数条目或调用图中的函数条目跳转到调用图中该函数的详细信息。
可以使用以下方法禁用映射
let g:no_gprof_maps = 1

HARE ft-hare

由于此插件的文本相当长,因此已将其放在一个单独的文件中:ft_hare.txt
每当 "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 插件的版本。对于不支持 Jar 类型存档的 Zip 插件版本,请考虑为每个感兴趣的 Jar 存档创建具有 ".zip" 扩展名的符号链接,并从现在开始将任何此类文件分配给变量。
否则,对于已定义的变量 "g:ftplugin_java_source_path",'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 中很重要,因为它们表示代码块等。为了方便起见,提供了一个 'formatexpr' 函数用于 gq 操作符。只要未定义 "g:java_ignore_javadoc" 或 "g:java_ignore_markdown",就可以使用以下命令按需启用 Markdown 注释的重新格式化:
setlocal formatexpr=g:javaformat#RemoveCommonMarkdownWhitespace()
或者对于小于 7.4.265 的 Vim 版本,使用:
setlocal formatexpr=javaformat#RemoveCommonMarkdownWhitespace()
此函数接受一系列行,删除常见的垂直前导空格,并重写范围内的行。根据作者的布局风格和注释内容,选择用于重新格式化的行可能从整个注释到仅其中的一部分。为了在每次删除 "g:java_ignore_markdown" 或 "g:java_ignore_javadoc" 后重新识别 Markdown 注释,请记住为大于 8.2.1397 的 Vim 版本手动重新加载 "javaformat.vim"。
runtime autoload/javaformat.vim
选项:'modeline' 被关闭以避免特洛伊木马的危险,并避免包含 "Vim:" 的主题行导致错误消息。'textwidth' 设置为 72。这通常建议用于电子邮件。'formatoptions' 设置为换行并将注释引号在新的行中重复,以便在引文中重复前导 ">"。您也可以使用 gq 格式化引用文本。
本地映射:<LocalLeader>q 或 \\MailQuote 在 Visual 模式下引用选定的文本,或在 Normal 模式下从光标位置到文件末尾引用文本。这意味着在每行中插入 "> "。
在 Nvim 中查看手册页。支持突出显示、完成、语言环境和导航。另请参见 find-manpage
man.lua 将始终尝试重用最接近的手册窗口(上方/左侧),否则创建拆分。
完成的大小写敏感性由 'fileignorecase' 控制。
命令:Man {name} 显示 {name} 的手册页。Man {sect} {name} 显示 {name} 和部分 {sect} 的手册页。Man {name}({sect}) 与上面相同。Man {sect} {name}({sect}) 用于完成过程中显示实际部分,此时提供的部分是前缀,例如 1m 与 1。Man {path} 打开位于 {path} 的手册页。如果 {path} 相对于当前目录,请在前面添加 "./"。Man 打开光标下 <cWORD>(手册缓冲区)或 <cword>(非手册缓冲区)的手册页。Man! 将当前缓冲区的内容显示为手册页。
:Man 接受命令修饰符。例如,要使用垂直拆分
:vertical Man printf
要重用当前窗口
:hide Man printf
本地映射:K 或 CTRL-] 跳转到光标下 <cWORD> 的手册页。接受部分计数。CTRL-T 跳转回打开手册页的位置。gO 显示手册页大纲。 gO q 如果作为 $MANPAGER 调用,则执行 :quit,否则执行 :close。
变量:g:no_man_maps 不要在手册页缓冲区中创建映射。g:ft_man_folding_enable 使用 foldmethod=indent foldnestmax=1 折叠手册页。b:man_default_sects 逗号分隔的、有序的优先部分列表。例如,在 C 语言中,通常希望使用部分 3 或 2
:let b:man_default_sections = '3,2'
g:man_hardwrap 硬换行到 $MANWIDTH 或窗口宽度(如果 $MANWIDTH 为空)。默认情况下启用。设置为 FALSE 以启用软换行。
要将 Nvim 用作手册页查看器
export MANPAGER='nvim +Man!'
请注意,当从 shell 运行 man 并使用环境中的 MANPAGER 时,man 将使用 groff 预格式化手册页。因此,Nvim 将不可避免地以从 stdin 传递给它的方式显示手册页。其中一个注意事项是,宽度将 _始终_ 进行硬换行,而不是像 g:man_hardwrap=0 那样进行软换行。您可以在环境中设置
export MANWIDTH=999
因此,groff 的预格式化输出将与 g:man_hardwrap=0 相同,即软换行。
要禁用粗体突出显示
:highlight link manBold Normal
使用 shell 中 MANPAGER 的替代方法是重新定义 man,例如
man() {
     nvim "+hide Man $1"
}

MARKDOWN ft-markdown-plugin

要启用折叠,请使用以下命令
let g:markdown_folding = 1
'expandtab' 将默认情况下设置。如果您不希望这样做,请使用以下命令
let g:markdown_recommended_style = 0

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
默认情况下,将根据 PEP8 设置以下选项
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
要禁用此行为,请在您的 vimrc 中设置以下变量
let g:python_recommended_style = 0

QUERY ft-query-plugin

使用 vim.treesitter.query.lint() 对已安装解析器的树状语义查询进行的代码检查默认情况下在 BufEnterBufWrite 上启用。要更改触发代码检查的事件,请使用
vim.g.query_lint_on = { 'InsertLeave', 'TextChanged' }
要完全禁用代码检查,请设置
vim.g.query_lint_on = {}

QF QUICKFIX qf.vim ft-qf-plugin

"qf" 文件类型用于快速修复窗口,请参见 quickfix-window
快速修复文件类型插件包括在 状态行 中显示生成快速修复列表的命令的配置。要禁用此设置,请按以下方式配置
:let g:qf_disable_statusline = 1
R MARKDOWN ft-rmd-plugin
默认情况下,不会加载 ftplugin/html.vim。如果您希望加载它,请在您的 vimrc 中添加以下内容
let rmd_include_html = 1
动态设置 'formatexpr' 选项,为 R 代码和 Markdown 代码使用不同的值。如果您希望不设置 'formatexpr',请在您的 vimrc 中添加以下内容
let rmd_dynamic_comments = 0
R RESTRUCTURED TEXT ft-rrst-plugin
动态设置 'formatexpr' 选项,为 R 代码和 ReStructured text 使用不同的值。如果您希望不设置 'formatexpr',请在您的 vimrc 中添加以下内容
let 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 代码使用不同的值。如果您希望不设置 'formatexpr',请在您的 vimrc 中添加以下内容
let rnw_dynamic_comments = 0

RPM SPEC ft-spec-plugin

由于此插件的文本很长,因此已将其放在一个单独的文件中:pi_spec.txt

SHADA ft-shada

允许以一种很好的方式编辑二进制 shada-file。打开的二进制文件将以以下格式显示
Type with timestamp YYYY-mm-ddTHH:MM:SS:
  % Key__  Description___  Value
  + fooba  foo bar baz fo  {msgpack-value}
  + abcde  abc def ghi jk  {msgpack-value}
Other type with timestamp YYYY-mm-ddTHH:MM:SS:
  @ Description__  Value
  - foo bar baz t  {msgpack-value}
  # Expected more elements in list
Some other type with timestamp YYYY-mm-ddTHH:MM:SS:
  # Unexpected type: type instead of map
  = {msgpack-value}
文件类型插件定义所有 Cmd-event。定义的 SourceCmd 事件使 "source file.shada" 等效于 "|:rshada| file.shada"。BufWriteCmdFileWriteCmdFileAppendCmd 事件受以下设置影响
g:shada#keep_old_header 布尔值,如果设置为 false,则在写入时将忽略所有标题条目。默认为 1。g:shada#add_own_header 布尔值,如果设置为 true,则第一个写入的条目将始终是标题条目,其中包含一个映射中的两个值,并附加数据:v:version 附加到 "version" 键,"shada.vim" 附加到 "generator" 键。默认为 1。
格式说明
1. # 开始注释。以空格字符开头,然后是 # 的行将被忽略。插件可能只添加注释行以指示 ShaDa 格式中的一些错误。不包含任何非空格字符的行也将被忽略。2. 每个条目都以格式为 "{type} with timestamp {timestamp}:" 的行开头。{timestamp}strftime() 格式的字符串,表示实际的 Unix 时间戳值。第一个 strftime() 参数等于 %Y-%m-%dT%H:%M:%S。写入时,此时间戳将使用 msgpack#strptime() 解析,并进行缓存(它会记住产生特定 strftime() 输出的时间戳,并在您未更改时间戳的情况下使用此值)。{type} 是以下之一:1 - 标题 2 - 搜索模式 3 - 替换字符串 4 - 历史条目 5 - 寄存器 6 - 变量 7 - 全局标记 8 - 跳转 9 - 缓冲区列表 10 - 局部标记 11 - 更改 * - 未知 (0x{type-hex})
每种类型都可以使用以下方式表示:未知条目: "Jump with timestamp ..." 等同于 "Unknown (0x8) with timestamp ...."。3. 在头部之后,有一行以下内容: 1. " % Key__ Description__ Value":映射头部。映射头部之后是表格,表格中可能包含注释和 " +", key, description 以及 {msgpack-value} 的行。key 通过至少两个空格与 description 分隔,description 通过至少两个空格与 value 分隔。映射中每个 key 的宽度最多与 "Key__" 头部相同:"Key" 允许最多 3 字节的 key,"Key__" 允许最多 5 字节的 key。如果 key 实际占用字节数更少,则剩余部分用空格填充。key 不能为空、以空格结尾、包含两个连续空格或包含多字节字符(如果需要,请使用 "=" 格式)。description 对宽度和内容有相同的限制,但允许空 description。description 列可以省略。
写入 description 时会忽略它。值 msgpack#equal 等于默认值的 key 会被忽略。key 的顺序保持不变。所有 key 都被视为字符串(而不是二进制字符串)。
注意: 对于缓冲区列表条目,允许存在多个映射头部。每个映射头部在缓冲区列表中开始一个新的映射条目,因为 ShaDa 缓冲区列表条目是映射数组。例如
Buffer list with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + f    file name    "/foo"
  + l    line number  1
  + c    column       10
等效于
Buffer list with timestamp 1970-01-01T00:00:00:
  = [{="f": "/foo", ="c": 10}]
以及
Buffer list with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + f    file name    "/foo"
  % Key  Description  Value
  + f    file name    "/bar"
等效于
Buffer list with timestamp 1970-01-01T00:00:00:
  = [{="f": "/foo"}, {="f": "/bar"}]
注意 2: 专门为寄存器条目设计了数组的特殊语法
Register with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + rc   contents     @
  | - "line1"
  | - "line2"
这等效于
Register with timestamp 1970-01-01T00:00:00:
  % Key  Description  Value
  + rc   contents     ["line1", "line2"]
如果数组表示形式看起来太长,则会自动使用这种语法。 2. " @ Description__ Value":数组头部。与映射相同,但省略了 key,description 不能为空。数组条目以 " -" 开头。例如
History entry with timestamp 1970-01-01T00:00:00:
  @ Description_  Value
  - history type  SEARCH
  - contents      "foo"
  - separator     '/'
等效于
History entry with timestamp 1970-01-01T00:00:00:
  = [SEARCH, "foo", '/']
注意: 这里不识别寄存器条目的特殊数组语法。 3. " = {msgpack-value}":原始值。在这种情况下,{msgpack-value} 可以具有任何类型。这里也不识别寄存器条目的特殊数组语法。

RUST ft-rust

由于此插件的文本比较长,因此已将其放在一个单独的文件中: ft_rust.txt.

SQL ft-sql

由于此插件的文本比较长,因此已将其放在一个单独的文件中: ft_sql.txt.
如果 *.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"
目前不识别其他格式。
g:typst_conceal
TRUE 时,Typst 文件类型插件将 'conceallevel' 选项设置为 2。
g:typst_folding
TRUE 时,Typst 文件类型插件将折叠标题。(默认值: FALSE
要启用
let g:typst_folding = 1
g:typst_foldnested
TRUE 时,Typst 文件类型插件将在其父节点下折叠嵌套标题。(默认值: TRUE
要禁用
let g:typst_foldnested = 0
Vim 文件类型插件定义了映射,使用 [[ 和 ]] 可以移动到函数的开头和结尾。使用 ]" 和 "[" 在注释之间移动。
可以使用以下命令禁用映射
let g:no_vim_maps = 1

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 标准库的路径。Zig ftplugin 读取 g:zig_std_dir 并将其附加到 Zig 文件的 'path' 中。Zig 标准库的存放位置取决于系统和安装方法。
可以使用 zig env 自动设置 g:zig_std_dir
let g:zig_std_dir = json_decode(system('zig env'))['std_dir']
例如,这可以放在 FileType :autocmd 或用户 ftplugin 中,以便仅在打开 Zig 文件时加载。
Zimbu 文件类型插件定义了映射,使用 [[ 和 ]] 可以移动到函数的开头和结尾。
可以使用以下命令禁用映射
let g:no_zimbu_maps = 1
命令索引
快速参考