Vim8软件包的功能是什么?我应该如何使用它?


Answers:


74

首先,可以: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命令一起加载。
  • 子文件夹(pluginautoloaddoc,...)是你的插件使用的人。

以下是文件夹的摘要:

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在helptagdoc中引入了两行:

: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即可生成所有帮助标签。


11
好总结。该package功能旨在最终终止Vimball和相关的恐龙,而不是与现代插件管理器竞争。如果pathogen您不依赖pathogen更加晦涩难懂的功能,那么它是的可行替代品。它不会尝试替换,例如Vundle。打包作为插件集合的概念是经过深思熟虑并且可能有用的,但是我担心没人会使用它,因为现代的插件管理器不支持它。插件管理器将不支持它,因为没有人使用它。这有点像鸡和鸡蛋的问题。
佐藤桂2016年

2
无关:您可能要添加有关的注释:helptags ALL
佐藤桂2016年

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


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

11

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

我曾经使用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

4

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

  1. pack/*/start在所提供的任何目录下创建目录set packpath。我进去了~/.config/nvim/pack/*/start请注意,您可以使用所需的任何目录名来代替,*但不能完全省略它,我不知道为什么。例如,您可以使用directory ~/.config/nvim/pack/foo/start~/.config/nvim/pack/bar/start但不能使用~/.config/nvim/pack/start

  2. 转到pack/*/start目录并在其中克隆包。

  3. 启动n / vim并:scriptnames检查是否已加载所有内容。不必担心是否并非每个部分都已加载,因为某些文件是在挂钩后加载的,例如autoload/plugin.vim
  4. 要卸载,只需删除克隆软件包的目录。不需要做任何其他事情。
  5. 这样做:helptags ALL产生的所有帮助文档的标签。不要:helptags {dir}生成标签目录下的帮助文档dir。例如,如果您将插件放入~/.config/nvim/pack/foo/plugin_name,则请执行:helptags ~/.config/nvim/pack/foo/plugin_name/doc。这将tags在插件的doc目录中生成一个文件。如果从目录中删除插件,则标记文件将消失,而vim将找不到帮助文件,因此您无需手动卸载doc文件。

2

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


如果您有多台WINDOWS计算机,并且希望使用相同的配置,那么... FTFY
Dan J.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.