Nvim-runtimepath-解析
runtimepath
或 rtp
是 Vim/Nvim 中的一个全局选项, 本质是一个 string 类型, 用于记录 Vim/Nvim 查找 vim/lua 文件的路径, 多个路径用 ,
分隔. 其默认值为:
"$XDG_CONFIG_HOME/nvim,
$XDG_CONFIG_DIRS[1]/nvim,
$XDG_CONFIG_DIRS[2]/nvim,
…
$XDG_DATA_HOME/nvim[-data]/site,
$XDG_DATA_DIRS[1]/nvim/site,
$XDG_DATA_DIRS[2]/nvim/site,
…
$VIMRUNTIME,
…
$XDG_DATA_DIRS[2]/nvim/site/after,
$XDG_DATA_DIRS[1]/nvim/site/after,
$XDG_DATA_HOME/nvim[-data]/site/after,
…
$XDG_CONFIG_DIRS[2]/nvim/after,
$XDG_CONFIG_DIRS[1]/nvim/after,
$XDG_CONFIG_HOME/nvim/after")
Vim/Nvim 会自动查找这些目录下的一些子目录, 分别对应不同的加载行为:
filetype.lua filetypes |new-filetype|
autoload/ automatically loaded scripts |autoload-functions|
colors/ color scheme files |:colorscheme|
compiler/ compiler files |:compiler|
doc/ documentation |write-local-help|
ftplugin/ filetype plugins |write-filetype-plugin|
indent/ indent scripts |indent-expression|
keymap/ key mapping files |mbyte-keymap|
lang/ menu translations |:menutrans|
lua/ |Lua| plugins
menu.vim GUI menus |menu.vim|
pack/ packages |:packadd|
parser/ |treesitter| syntax parsers
plugin/ plugin scripts |write-plugin|
queries/ |treesitter| queries
rplugin/ |remote-plugin| scripts
spell/ spell checking files |spell|
syntax/ syntax files |mysyntaxfile|
tutor/ tutorial files |:Tutor|
似乎在自己添加一个目录到 runtimepath
之后, 其也会搜寻新添加目录下的这些子目录. 注意这些子目录对脚本的处理大都不相同:
plugin
, 放置在该目录下的脚本都会被自动读取并运行ftplugin
, 和plugin
类似, 但会先检查文件扩展名, 如果有ftplugin/lua.lua
文件, 那么该文件会在编辑 lua 文件时被自动读取syntax
和ftplugin
一样ftdetect
和ftplugin
一样lua
, nvim 会在这个目录下寻找要加载的脚本, 但是不会自动运行, 需要在init.lua
中require
, 如lua/hello.lua
, 则需要require("hello")
compiler
, 用于:compiler
指令查找文件并运行colors
, 用于:colorscheme
指令查找文件并运行tutor
, 用于:Tutor
指令查找文件并运行, 但是文件扩展名需要为.tutor
需要注意的是, 只有 runtimepath
中指定的目录, 其对应的子目录才会有效, 而不会自动嵌套其作用.
可以用:
1 |
|
来查看 $XDG_CONFIG_HOME
设置的值.
用:
1 |
|
来查看 $XDG_DATA_HOME
的值.
用:
1 |
|
来查看 $XDG_STATE_HOME
的值.
查看当前 runtimepath 值
使用 vimscript 查看, 可以在 normal 模式下运行:
1 |
|
使用 lua api 的查看方法, 这里同样是 normal 模式下运行:
1 |
|
向 runtimepath 添加目录
用 vimscript 如:
1 |
|
Lua API 如:
1 |
|
lua 目录的好处
假如 ~/.config/nvim
下的目录结构为:
1 |
|
若想加载 lua/hello.lua
文件, 则需要在 init.lua
文件中加上:
1 |
|
Nvim-runtimepath-解析
http://example.com/2024/03/27/Nvim-runtimepath-解析/