Answers:
首先,可以:h packages
在新编译的Vim8版本以及Github上找到相关文档。
第一个重要的注意事项是关于词汇表:在Vim8中,一个软件包的定义如下:
Vim软件包是包含一个或多个插件的目录。
这意味着创建新的软件包管理器是为了帮助用户在同一档案中管理其所有插件。该文档列出了以下优点:
软件包可以作为存档下载,也可以在其自己的目录中解压缩。因此,文件不会与其他插件的文件混合在一起。这样可以轻松进行更新和删除。
软件包可以是git,mercurial等存储库。这使得更新非常容易。
一个包可以包含多个相互依赖的插件。
软件包可以包含在启动时自动加载的插件,以及仅在需要时才加载的插件
:packadd
。
因此,我们的想法是创建一个包含所有具有以下结构的插件的文件夹:
$HOME/.vim/pack/my-plugins/
start/
foo/
plugin/
foo.vim
syntax/
some.vim
bar/
plugin/
bar.vim
opt/
buzz/
plugin/
buzz.vim
文件夹的位置由选项定义packpath
(请参阅参考资料:h 'packpath'
)。
请注意文件夹结构的重要性:
start
文件夹包含将在启动时自动加载的插件。opt
文件夹包含“可选”插件,并随packadd
命令一起加载。plugin
,autoload
,doc
,...)是你的插件使用的人。以下是文件夹的摘要:
start/foobar/plugin/foo.vim " always loaded, defines commands
start/foobar/plugin/bar.vim " always loaded, defines commands
start/foobar/autoload/foo.vim " loaded when foo command used
start/foobar/doc/foo.txt " help for foo.vim
start/foobar/doc/tags " help tags
opt/fooextra/plugin/extra.vim " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt " help for extra.vim
opt/fooextra/doc/tags " help tags
将这些文件放置在正确的位置后,打开Vim将在其中加载插件start
并使用使其opt
可用:packadd
。
现在,此功能可以代替现有的插件管理器吗?
免责声明:这部分可能有点自以为是。
我认为,这种新的软件包管理器的方法与我们以前使用的插件管理器的方法确实不同,因为它是用来管理一个(或多个)包含某些插件的档案的。
开箱即用,程序包管理器不提供功能来一步一步地更新您的插件,从Github地址自动获取它们或选择要启用/禁用的插件。
我不确定开箱即用地使用它是否真的很方便(特别是因为处理嵌套的版本控制存储库可能是一件痛苦的事情),但是也许这是使插件管理器更高效的机会吗?
现在,还可以想象移动现有插件以采用包管理器所需的结构,并直接从文件系统中对其进行管理。也许将创建一些包装器以使用此新功能。
编辑正如@Sato Katsura所建议的,这里是有关helptags
命令的注释。Vim8 commit在helptag
doc中引入了两行:
:helpt[ags] [++t] {dir} Generate the help tags file(s) for directory {dir}. When {dir} is ALL then all "doc" directories in 'runtimepath' will be used.
这意味着新的程序包管理器可简化生成用户归档中的帮助标签的过程。使用单个命令:helptags ALL
即可生成所有帮助标签。
:helptags ALL
。
:helptag ALL
我看看并添加它,谢谢你的建议!
要扩展“可以替换插件管理器”,
我曾经使用Vundle,这很棒,但是现在已经用18行左右的bash代替了它。
我发现在pack目录中使用子文件夹对相关插件进行分组很有用。例如“语法”或“ Ruby”。
相关的bash示例如下。放在文件中并运行它。
有关该主题的其他讨论,请访问:https : //stories.abletech.nz/get-rid-of-your-vim-plugin-manager-7c8ff742f643#.abnjauzgk
#!/usr/bin/env bash
# This file lives in ~/.vim/pack/install.sh
# Remember to add executable: chmod +x ~/.vim/pack/install.sh
#
# Create new folder in ~/.vim/pack that contains a start folder and cd into it.
#
# Arguments:
# package_group, a string folder name to create and change into.
#
# Examples:
# set_group syntax-highlighting
#
function set_group () {
package_group=$1
path="$HOME/.vim/pack/$package_group/start"
mkdir -p "$path"
cd "$path" || exit
}
# Clone or update a git repo in the current directory.
#
# Arguments:
# repo_url, a URL to the git repo.
#
# Examples:
# package https://github.com/tpope/vim-endwise.git
#
function package () {
repo_url=$1
expected_repo=$(basename "$repo_url" .git)
if [ -d "$expected_repo" ]; then
cd "$expected_repo" || exit
result=$(git pull --force)
echo "$expected_repo: $result"
else
echo "$expected_repo: Installing..."
git clone -q "$repo_url"
fi
}
(
set_group ruby
package https://github.com/tpope/vim-rails.git &
package https://github.com/tpope/vim-rake.git &
package https://github.com/tpope/vim-bundler.git &
package https://github.com/tpope/vim-endwise.git &
wait
) &
(
set_group syntax
package https://github.com/kchmck/vim-coffee-script.git &
package https://github.com/tpope/vim-markdown.git &
package https://github.com/ap/vim-css-color.git &
wait
) &
(
set_group colorschemes
package https://github.com/altercation/vim-colors-solarized.git &
wait
) &
wait
@statox提供的答案非常具有描述性,但是对于一个可能会分散注意力的新用户而言,因为他们可以直接阅读帮助文件。我要概述您需要在指针中执行的操作。
pack/*/start
在所提供的任何目录下创建目录set packpath
。我进去了~/.config/nvim/pack/*/start
。请注意,您可以使用所需的任何目录名来代替,*
但不能完全省略它,我不知道为什么。例如,您可以使用directory ~/.config/nvim/pack/foo/start
,~/.config/nvim/pack/bar/start
但不能使用~/.config/nvim/pack/start
。
转到pack/*/start
目录并在其中克隆包。
:scriptnames
检查是否已加载所有内容。不必担心是否并非每个部分都已加载,因为某些文件是在挂钩后加载的,例如autoload/plugin.vim
。:helptags ALL
产生的所有帮助文档的标签。不要:helptags {dir}
生成标签目录下的帮助文档dir
。例如,如果您将插件放入~/.config/nvim/pack/foo/plugin_name
,则请执行:helptags ~/.config/nvim/pack/foo/plugin_name/doc
。这将tags
在插件的doc目录中生成一个文件。如果从目录中删除插件,则标记文件将消失,而vim将找不到帮助文件,因此您无需手动卸载doc文件。
package
功能旨在最终终止Vimball和相关的恐龙,而不是与现代插件管理器竞争。如果pathogen
您不依赖pathogen
更加晦涩难懂的功能,那么它是的可行替代品。它不会尝试替换,例如Vundle
。打包作为插件集合的概念是经过深思熟虑并且可能有用的,但是我担心没人会使用它,因为现代的插件管理器不支持它。插件管理器将不支持它,因为没有人使用它。这有点像鸡和鸡蛋的问题。