Nvim :help
页面,生成 自 源代码 使用 tree-sitter-vimdoc 解析器。
:filetype on每次编辑新文件或现有文件时,Vim 都会尝试识别文件的类型并设置 'filetype' 选项。这将触发 FileType 事件,可用于设置语法高亮、设置选项等。
:help ft-vim-indent :help ft-vim-syntax :help ft-man-plugin如果文件类型未自动检测到,或者检测到的类型不正确,您可以手动设置 'filetype' 选项,或者在您的文件中添加模式行。例如,对于 IDL 文件,请使用以下命令
:set filetype=idl或将此 模式行 添加到文件
/* vim: set filetype=idl : */
:filetype plugin on如果文件类型检测尚未打开,它也会打开。这实际上是在 'runtimepath' 中加载文件 "ftplugin.vim"。结果是,当编辑文件时,将加载其插件文件(如果存在于检测到的文件类型)。filetype-plugin
:filetype plugin off文件类型检测不会关闭。但是,如果您关闭文件类型检测,插件也不会加载。这实际上是在 'runtimepath' 中加载文件 "ftplugof.vim"。
:filetype indent on如果文件类型检测尚未打开,它也会打开。这实际上是在 'runtimepath' 中加载文件 "indent.vim"。结果是,当编辑文件时,将加载其缩进文件(如果存在于检测到的文件类型)。indent-expression
:filetype indent off文件类型检测不会关闭。但是,如果您关闭文件类型检测,缩进文件也不会加载。这实际上是在 'runtimepath' 中加载文件 "indoff.vim"。这将禁用您要打开的文件的自动缩进。它将在已打开的文件中继续工作。重置 'autoindent'、'cindent'、'smartindent' 和/或 'indentexpr' 以禁用已打开文件中的缩进。
:filetype off这将保留 "plugin" 和 "indent" 的标志,但由于没有检测到文件类型,它们将无法正常工作,直到下一个 ":filetype on"。
:filetype输出类似于以下内容
filetype detection:ON plugin:ON indent:OFF文件类型也用于语法高亮。如果使用 ":syntax on" 命令,也会安装文件类型检测。没有必要在 ":syntax on" 之后执行 ":filetype on"。
:filetype detect如果您从空文件开始并键入了可以检测文件类型的文本,请使用此命令。例如,当您在 shell 脚本中输入以下内容时:"#!/bin/csh"。当文件类型检测关闭时,它将首先启用,就像使用了 "on" 参数一样。
*.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:let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'这意味着不会检查压缩文件的内容。
:!mkdir -p ~/.config/nvim/ftdetect
au BufRead,BufNewFile *.mine set filetype=mine
:w ~/.config/nvim/ftdetect/mine.vim
au BufRead,BufNewFile *.txt setfiletype text
au BufRead,BufNewFile * if &ft == 'pascal' | set ft=mypascal | endifC. 如果您的文件类型可以通过文件名或扩展名来检测。1. 创建您的用户运行时目录。通常情况下,您将使用 'runtimepath' 选项的第一个条目。Unix 的示例
:!mkdir -p ~/.config/nvim
" 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
:w ~/.config/nvim/filetype.vim
:!mkdir -p ~/.config/nvim
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
:w ~/.config/nvim/scripts.vim
did_load_filetypes
全局变量来禁用 Nvim 提供的内置文件类型检测。如果此变量存在,则默认的 $VIMRUNTIME/filetype.lua
将不会运行。set runtimepath产生以下输出
vim -V2您将看到很多消息,其中包含关于加载插件的备注。它以以下内容开头
:let maplocalleader = ","
:map ,p <Plug>MailQuote
:let no_mail_maps = 1
vim ~/.config/nvim/ftplugin/fortran.vim
cp $VIMRUNTIME/ftplugin/fortran.vim ~/.config/nvim/ftplugin/fortran.vim
vim ~/.config/nvim/after/ftplugin/fortran.vim
: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
setlocal expandtab tabstop=2 softtabstop=2 shiftwidth=2要禁用此行为,请在您的 vimrc 中设置以下变量
let g:arduino_recommended_style = 0
:let g:awk_is_gawk = 1
<Leader>
o 以同样智能的方式启动新的 Changelog 条目(见下文)。runtime ftplugin/changelog.vim
<Leader>
o 切换到为当前目录打开的 ChangeLog 缓冲区,或者如果它存在于当前目录中,则在新的缓冲区中打开它。然后它执行与上面描述的本地 <Leader>
o 相同的操作。whoami
和 hostname
来构建电子邮件地址。最终形式为Full Name <user@host>
|2003-01-14 Full Name <user@host> | | * prefix|
| * prefix|
|2003-01-14 Full Name <user@host>
let g:freebasic_lang = "fblite"
setlocal noexpandtab softtabstop=0 shiftwidth=0要禁用此行为,请在您的 vimrc 中设置以下变量
let g:gdscript_recommended_style = 0
setlocal noexpandtab softtabstop=0 shiftwidth=0要禁用此行为,请在您的 vimrc 中设置以下变量
let g:go_recommended_style = 0
<C-]>
,用于从 gprof 平面配置文件中的函数条目或调用图中的函数条目跳转到调用图中该函数的详细信息。let g:no_gprof_maps = 1
let g:ftplugin_java_source_path = '/path/to/src.jar' let g:ftplugin_java_source_path = '/path/to/src.zip'
let g:ftplugin_java_source_path = $JDK_SRC_PATH let &l:path = g:ftplugin_java_source_path . ',' . &l:path
doautocmd FileType
///
) 后面常见的垂直前导空格,以提高美观性;但是,一些水平前导空格在 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()
8.2.1397
的 Vim 版本手动重新加载 "javaformat.vim"。runtime autoload/javaformat.vim
<LocalLeader>
q 或 \\MailQuote 在 Visual 模式下引用选定的文本,或在 Normal 模式下从光标位置到文件末尾引用文本。这意味着在每行中插入 "> "。{name}
显示 {name}
的手册页。Man {sect}
{name}
显示 {name}
和部分 {sect}
的手册页。Man {name}
({sect}
) 与上面相同。Man {sect}
{name}
({sect}
) 用于完成过程中显示实际部分,此时提供的部分是前缀,例如 1m 与 1。Man {path}
打开位于 {path}
的手册页。如果 {path}
相对于当前目录,请在前面添加 "./"。Man 打开光标下 <cWORD>
(手册缓冲区)或 <cword>
(非手册缓冲区)的手册页。Man! 将当前缓冲区的内容显示为手册页。:vertical Man printf
要重用当前窗口:hide Man printf
本地映射:K 或 CTRL-]
跳转到光标下 <cWORD>
的手册页。接受部分计数。CTRL-T 跳转回打开手册页的位置。gO 显示手册页大纲。 gO q 如果作为 $MANPAGER 调用,则执行 :quit,否则执行 :close。:let b:man_default_sections = '3,2'g:man_hardwrap 硬换行到 $MANWIDTH 或窗口宽度(如果 $MANWIDTH 为空)。默认情况下启用。设置为 FALSE 以启用软换行。
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"
}
let g:markdown_folding = 1'expandtab' 将默认情况下设置。如果您不希望这样做,请使用以下命令
let g:markdown_recommended_style = 0
<C-]>
和 <C-T>
,用于模拟标签栈以导航 PDF。以下内容将被视为标签:let g:no_pdf_maps = 1
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8要禁用此行为,请在您的 vimrc 中设置以下变量
let g:python_recommended_style = 0
BufEnter
和 BufWrite
上启用。要更改触发代码检查的事件,请使用vim.g.query_lint_on = { 'InsertLeave', 'TextChanged' }
vim.g.query_lint_on = {}
:let g:qf_disable_statusline = 1R MARKDOWN ft-rmd-plugin
let rmd_include_html = 1动态设置 'formatexpr' 选项,为 R 代码和 Markdown 代码使用不同的值。如果您希望不设置 'formatexpr',请在您的 vimrc 中添加以下内容
let rmd_dynamic_comments = 0R RESTRUCTURED TEXT ft-rrst-plugin
let rrst_dynamic_comments = 0
setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8要启用此行为,请在您的 vimrc 中设置以下变量
let g:rst_style = 1
let rnw_dynamic_comments = 0
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"。BufWriteCmd、FileWriteCmd 和 FileAppendCmd 事件受以下设置影响
#
开始注释。以空格字符开头,然后是 #
的行将被忽略。插件可能只添加注释行以指示 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})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"}]
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"]
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", '/']
{msgpack-value}
":原始值。在这种情况下,{msgpack-value} 可以具有任何类型。这里也不识别寄存器条目的特殊数组语法。*.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"目前不识别其他格式。
let g:typst_folding = 1
let g:typst_foldnested = 0
let g:no_vim_maps = 1
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
let g:zig_recommended_style = 0
let g:no_zimbu_maps = 1