Nvim :help
页面,生成 自 源代码 使用 tree-sitter-vimdoc 解析器。
mkdir -p ~/.config/nvim/ftplugin
set runtimepath?
setlocal softtabstop=4 noremap <buffer> <LocalLeader>c o/**************<CR><CR>/<Esc> let b:undo_ftplugin = "setl softtabstop< | unmap <buffer> <LocalLeader>c"尝试编辑 C 文件。您应该注意到 'softtabstop' 选项已设置为 4。但是,当您编辑其他文件时,它将重置为默认的零。这是因为使用了 ":setlocal" 命令。这会将 'softtabstop' 选项仅设置为缓冲区的本地选项。只要您编辑另一个缓冲区,它就会设置为该缓冲区设置的值。对于新缓冲区,它将获得默认值或最后一个 ":set" 命令的值。
<buffer>
" 命令创建了一个映射,该映射是当前缓冲区的本地映射。这适用于任何映射命令:":map!"、":vmap" 等。映射中的 <LocalLeader> 将被 "maplocalleader" 变量的值替换。$VIMRUNTIME/ftplugin/有关编写文件类型插件的更多详细信息,请参见此处:write-plugin.
augroup filetypedetect au BufNewFile,BufRead *.xyz setf xyz augroup END这将识别所有以 ".xyz" 结尾的文件作为 "xyz" 文件类型。":augroup" 命令将此自动命令放在 "filetypedetect" 组中。这允许在执行 ":filetype off" 时删除所有用于文件类型检测的自动命令。"setf" 命令将 'filetype' 选项设置为其参数,除非它已经设置。这将确保 'filetype' 不会被设置两次。
augroup filetypedetect au BufNewFile,BufRead *.xyz setf xyz au BufNewFile,BufRead /usr/share/scripts/* setf ruby augroup END但是,如果您现在编辑文件 /usr/share/scripts/README.txt,这不是 ruby 文件。以 "*" 结尾的模式的危险在于它很快就会匹配太多文件。为了避免此问题,将 filetype.vim 文件放在另一个目录中,该目录位于 'runtimepath' 的末尾。例如,对于 Unix,您可以使用 "~/.config/nvim/after/filetype.vim"。您现在将文本文件的检测放在 ~/.config/nvim/filetype.vim 中
augroup filetypedetect au BufNewFile,BufRead *.txt setf text augroup END该文件首先在 'runtimepath' 中找到。然后在 ~/.config/nvim/after/filetype.vim 中使用此文件,该文件最后找到
augroup filetypedetect au BufNewFile,BufRead /usr/share/scripts/* setf ruby augroup END现在会发生的事情是,Vim 会在 'runtimepath' 中的每个目录中搜索 "filetype.vim" 文件。首先找到 ~/.config/nvim/filetype.vim。捕获
*.txt
文件的自动命令在那里定义。然后 Vim 找到 $VIMRUNTIME 中的 filetype.vim 文件,该文件位于 'runtimepath' 的中间位置。最后找到 ~/.config/nvim/after/filetype.vim,并添加用于检测 /usr/share/scripts 中的 ruby 文件的自动命令。当您现在编辑 /usr/share/scripts/README.txt 时,会按定义顺序检查自动命令。*.txt
模式匹配,因此执行 "setf text" 将文件类型设置为 "text"。ruby 的模式也匹配,并执行 "setf ruby"。但是,由于 'filetype' 已经设置为 "text",因此这里没有任何操作。当您编辑文件 /usr/share/scripts/foobar 时,会检查相同的自动命令。只有 ruby 的自动命令匹配,"setf ruby" 会将 'filetype' 设置为 ruby。if did_filetype() finish endif if getline(1) =~ '^#!.*[/\\]xyz\>' setf xyz endif使用 did_filetype() 的第一次检查是为了避免您检查已通过文件名检测到文件类型的文件的內容。这避免了在 "setf" 命令不会做任何事情的情况下浪费时间检查文件。scripts.vim 文件由默认 filetype.vim 文件中的自动命令源代码提供。因此,检查顺序为