Vim 8已于今天发布,发行说明中提到了新的“程序包”功能。它是什么,应该如何使用?

最重要的是,它可以代替旧的插件管理器吗?

#1 楼

首先,可以在新编译的Vim8版本以及Github上的:h packages上找到相关文档。
关于词汇的第一个重要说明:在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,autoloaddoc, ...)是您在插件中使用过的文件。

以下是文件夹的摘要:
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将加载插件

现在,该功能可以代替现有的插件管理器吗?
免责声明:这部分内容可能会有些过分。
我认为,这种新的软件包管理器的方法与我们以前使用的插件管理器的方法确实不同,因为它是用来管理一个(或多个)包含一些插件的存档的。
开箱即用,程序包管理器不提供用于逐个更新插件,从Github地址自动获取插件或选择要启用/禁用的插件的功能。
我不确定是否会开箱即用真的很方便(特别是因为处理嵌套的版本控制存储库可能是一件艰巨的任务),但这也许是使插件管理器更高效的时机吗?
现在也可以想象移动现有插件采用包管理器所需的结构,并直接从文件系统管理它们。也许会创建一些包装器以使用此新功能。

编辑如@Sato Katsura所建议,此处是有关start命令的注释。 Vim8 commit在opt 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.


这意味着新的程序包管理器可简化生成用户归档中的helptag的过程。使用单个命令:packadd即可生成所有帮助标签。

评论


好总结。该软件包功能旨在最终终止vimball和相关的恐龙,而不是与现代插件管理器竞争。如果您不依赖病原体的更模糊特征,那么它是病原体的可行替代品。它没有尝试替换例如Vundle。打包作为插件集合的概念是经过深思熟虑并且可能有用的,但是我担心没人会使用它,因为现代的插件管理器不支持它。插件管理器将不支持它,因为没有人使用它。这有点鸡和蛋的问题。

–佐藤桂
16/09/12在17:08



无关:您可能想添加有关:helptags ALL的注释。

–佐藤桂
16年9月12日在17:08

@Sato感谢有关vimball的注释:由于我从未使用过它们,所以我什至没有使用它,但是现在您提到它似乎很明显。我同意您的“没人会使用它”的注释,对此我并不十分乐观。对于:helptag ALL,我来看一下并添加它,谢谢您的建议!

–statox♦
16年9月12日在17:14

我将话题外的讨论移到了聊天室。

–马丁·图尔诺伊(Martin Tournoij)
16年9月12日在22:54

minpac是Vim 8(和NeoVim)的新软件包管理器。它基于Vim 8的软件包,提供更新或删除插件(删除未使用的插件)的命令。为了获得加分,它还使用了新的作业控制功能来并行执行多个更新。我认为这确实很有希望,因为它通过更好的UX增强了内置程序包。

–nelnel
17年4月3日在10:59

#2 楼

为了扩展“可以替换插件管理器”,

我曾经使用Vundle,这很棒,但是现在已经用18行左右的bash替换了它。

我发现使用pack目录中的子文件夹对相关插件进行分组非常有用。例如。 “语法”或“ Ruby”。

相关的bash示例如下。放入文件中并运行它。 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=
  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=
  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


评论


这很棒

–Physiccubus
20 Mar 28 '20 at 0:01

当组中有多个软件包时,更新不起作用。第二个软件包重新安装在另一个软件包中。代码必须更正。

– nickkzl
20 Dec 13在13:51



#3 楼

@statox提供的答案非常具有描述性,但是对于一个可能会分散注意力的新用户而言,因为他们可以直接阅读帮助文件。我要概述指针中需要执行的操作。


pack/*/start提供的任何目录下创建set packpath目录。我在~/.config/nvim/pack/*/start中做了。请注意,您可以使用任何想要的目录名称代替*,但是您不能完全省略它,我不知道为什么。例如,您可以使用目录~/.config/nvim/pack/foo/start~/.config/nvim/pack/bar/start,但不能使用~/.config/nvim/pack/start
转到pack/*/start目录并在其中克隆软件包。
启动n / vim并执行:scriptnames检查是否已加载所有内容。不必担心是否并非每个部分都已加载,因为某些文件是在挂钩后加载的,例如autoload/plugin.vim
要卸载,只需删除克隆软件包的目录。无需执行其他任何操作。
执行:helptags ALL可以为所有帮助文档生成标签。执行:helptags {dir}为目录dir下的帮助文档生成标签。例如,如果将插件放在~/.config/nvim/pack/foo/plugin_name中,请执行:helptags ~/.config/nvim/pack/foo/plugin_name/doc。这将在插件的doc目录中生成一个tags文件。如果从目录中删除插件,标记文件将消失,而vim将找不到帮助文件,因此您无需手动卸载doc文件。


评论


赞成提及:scriptnames

– blakemade
20 Jan 1 '20 at 23:20

您可以执行:filter / \〜/脚本名来过滤掉默认插件。

– nickkzl
20 Dec 12'在9:28

#4 楼

可以将新格式视为等同于病原体的格式,因此管理人员仍有空间可以下载所需的插件。有一些新的插件管理器可以利用这种新的包格式,但是我仍然喜欢Vire,因为他们不愿为您管理vimrc。如果您有多台计算机,并且希望在同一台计算机上进行配置,那么Vire使其变得非常简单。

评论


如果您有多台WINDOWS计算机,并且希望使用相同的配置,则... FTFY

– Dan J.
19年3月3日在18:33