您现在的位置是:首页 >技术杂谈 >使用 Git 管理 Vim 插件网站首页技术杂谈
使用 Git 管理 Vim 插件
vim 有很多管理插件的插件,例如 vundle、vim-plug、dein 等等。我最早使用的是 vundle,后来迁移到了 vim-plug 上,中间也试用过 dein,但没有发现亮点。这些插件的核心功能就是从 GitHub 下载或者更新插件。而实现这些核心功能并不复杂,git 就是很好的工具。而我自己的配置最终也迁移到了 git 上。
插件的目录结构
所谓的 vim 插件不过一个特殊的文件夹,其主要的结构如下:
- autoload/ 插件公共代码,vim 在执行 viml 的时候自动载入。
:h autoload - colors/ 配色主题定义文件。
:h colorscheme - ftplugin/ 专用代码,以文件类型加下划线开头,遇到对应文件自动执行。
:h write-filetype-plugin - plugin/ 通用代码,自动执行。
:h write-plugin - syntax/ 语法高亮定义文件。
:h mysyntaxfile
一般的插件都有 autoload 和 plugin 两个目录,简单的插件可能只有一个 plugin 目录,支持多种语言的插件会有一个 ftplugin 目录。vim 还支持很多其他功能的目录,大家可以通过 :h runtimepath 查看详细的说明文档。
vim 如何加载插件
在 vim 上执行 :set runtimepath,会有类似输出:
runtimepath=~/.vim,/usr/share/vi...files/after,~/.vim/after
这是一个逗号分割的路径列表,每个路径都是一个插件。vim 会依次执行相应的 viml 文件,载入各种定义文件。在没有插件管理器的年代,安装插件就是将插件对应的目录复制到 ~/.vim。但是,直接使用 ~/.vim 会将不同插件的目录混合到一起,所以很难去更新特定插件(是不是跟 linux 下的软件管理很相似?)。
这时候,各种插件管理器就粉墨登场了,而它们的实质就是在修改这个 runtimepath 变量。
最简单的插件『管理器』
首先,创建一个 ~/.vim 目录,将创建 ~/.vim/vimrc 文件。然后,切换到 ~/.vim 执行 git init 完成准备工作。
vim 从 8.0 开始支持原生插件。 如果插件需要在 vim 启动的时候加载,就放到 ~/.vim/pack/*/start/ 目录。这里的 * 可以是任意目录名,我用的是 vendor,大家随意。如果想在需要的时候加载插件,那就放到 ~/.vim/pack/*/opt/ 目录,在需要的时候运行 packadd name 就可以加载了。
例如,我想在打开 TomL 文件的时候加载 toml 插件,则可以在 vimrc 加一行:
autocmd BufReadPre *.toml packadd toml
并且把 toml 插件放到 ~/.vim/pack/*/opt/toml 就行了。是不是更加简单。
不过要注意,一定得在 BufReadPre 的时候调用 packadd。
复杂版本,不再推荐使用
git 操作
# 添加插件
git submodule add https://github.com/taoso/mru pack/vendor/start/mru
# 更新指定插件
git submodule update --init --remote pack/vendor/start/mru
# 更新所有插件
git submodule update --init --remote
# 删除插件
git rm pack/vendor/start/mru
# 恢复刚才删除的插件,此法可以用于临时禁用插件
git reset HEAD
git checkout .gitmodules
git submodule update --init pack/vendor/start/mru
最后,大家可以使用 git commit 提交自己的改动,并使用 git push 将自己的配置推送到 GitHub 等在线仓库保存。
结语
使用 git 管理 vim 插件具有简单、清晰、不依赖第三方插件的特点。但是,用户需要了解 git 的 submodule 概念、需要了解 vim 的 runtimepath 概念、需要手动执行插件下载后的后续操作(如 composer update、:UpdateRemotePlugins 等),门槛比较高,只适合有一定基础的 vim 用户。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结