【问题标题】:Cannot get Pathogen to work in Vim无法让 Pathogen 在 Vim 中工作
【发布时间】:2012-12-17 21:08:44
【问题描述】:

我知道有很多关于这个问题的帖子,但我试图让 Vim 的这个简单部分工作但无济于事。我想让病原体插件与 Vim 一起工作。作为几点,我正在使用 Windows 系统。我已经通过 github 下载了病原体,并创建了目录.vim 和子目录autoloadbundle。我的.vimrc 是使用mkvimrc 创建的默认值:

call pathogen#infect()
syntax on
filetype plugin indent on

添加到底部。解决我看到的其他帖子:

:set cp? = nocompatible

我猜一个问题的一部分是在我运行:scriptnames 之后我没有得到.vim 目录。我只得到Vim\.vimrcvim73 目录。我该如何解决这个问题?如果这对这里的其他人来说很明显,我已经在这里很长时间了。

【问题讨论】:

  • 顺便说一句,您的 :set 语法错误。 =周围不能有空格,去掉?;它用于显示当前值。

标签: vim plugins pathogen


【解决方案1】:

在 Windows 上,本地用户配置的默认位置是 $HOME/vimfiles。如果您的文件在 $HOME/.vim 中,那么您需要将它们移动到 vimfiles 或将 .vim 添加到 .vimrc 中的运行时路径:

set runtimepath+=~/.vim

另外,如果 Pathogen 位于 bundle 的子目录中,则需要从那里显式运行它,因为默认情况下 Vim 只会在 ~/.vim/ 中查找。把这个放在你的.vimrcpathogen#infect调用之前:

runtime bundle/pathogen/autoload/pathogen.vim

【讨论】:

  • 就是这样,我将 .vim 目录移动到 vimfiles 中,一切似乎都在工作。谢谢,这让我发疯了。
  • 没问题。在不同平台之间移动文件时,这经常让我感到困惑。我希望 Vim 的默认值是一致的!
【解决方案2】:

我的解决方案是重新下载pathogen.vim,因为它因未能遵循重定向而无法下载。 tpope的github上指定的URL有以下步骤:

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

您将知道重定向下载失败,因为pathogen.vim 的内容将是一个 302 重定向页面。只需从重定向中包含的 URL 下载,例如:

wget -N -O ~/.vim/autoload/pathogen.vim https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim

【讨论】:

    【解决方案3】:

    使用禁用的插件打开 Vim 并输入 :set rtp - 注意:

    • 如果您使用的是 Unix,则默认情况下:第一个是 ~/.vim,最后一个是 ~/.vim/after
    • 如果您使用的是 Windows,则默认情况下:第一个是 ~/vimfiles,最后一个是 ~/vimfiles/after

    这是一种 Vim 约定。 after 目录用于强制覆盖 Vim 的默认值或插件的设置,这有时很重要。这就是为什么它们是rtp 中的最后一个。

    Pathogen 实际上解析了当前rtp 变量的结构,并使用它将插件路径正确地注入rtp。比如看我的rtp

    runtimepath=
    ~/.vim,
    ~\.vim\plugins\NERDCommenter,
    ~\.vim\plugins\NERDTree,
    ~\.vim\plugins\SameSyntaxMotion,
    ~\.vim\plugins\Tabular,
    ~\.vim\plugins\UltiSnips,
    ~\.vim\plugins\c.vim,
    ~\.vim\plugins\clang_complete,
    ~\.vim\plugins\CountJump,
    ~\.vim\plugins\delimitMate,
    ~\.vim\plugins\fswitch,
    ~\.vim\plugins\matchit,
    ~\.vim\plugins\matlab,
    ~\.vim\plugins\neocomplcache,
    ~\.vim\plugins\protodef,
    ~\.vim\plugins\python-syntax,
    ~\.vim\plugins\solarized,
    ~\.vim\plugins\syntastic,
    ~\.vim\plugins\vim-creole,
    ~\.vim\plugins\vim-latex,
    ~\.vim\plugins\vim-markdown,
    ~\.vim\plugins\vim-python-pep8-indent,
    ~/vimfiles,
    D:\Applications\Vim/vimfiles,
    D:\Applications\Vim,
    D:\Applications\Vim/vimfiles/after,
    ~/vimfiles/after,
    ~\.vim\plugins\Tabular\after,
    ~\.vim\plugins\UltiSnips\after,
    ~\.vim\plugins\vim-markdown\after,
    ~/.vim/after
    

    注意病原体如何注入路径。它检测到有几个插件有after 目录并将它们放在~/.vim/after 之前 - 所以最后一个词总是我的。

    要实现这种病原体需要一对~/.vim~/.vim/after~/vimfiles~/vimfiles/after 甚至~/stuff~/stuff/after(虽然不确定最后一种情况)作为注入插件的锚' 路径顺序正确。

    如果缺少这对中的任何目录,那么您将对病原体有一些令人讨厌的经历(就像我前一段时间所做的那样,直到我发现了所有上述内容并浏览了病原体源代码)-因为路径将无法正确注射。

    现在你可以看到Prince Goulash提供的答案是完全错误

    1. 第一个错误是他将~/.vim 附加到rtp 而 他应该把它放在前面;
    2. 第二个错误是他没有附加~/.vim/after

    正确的解决方案如下所示。如果您必须在包括 Windows 在内的不同平台上工作,您应该将其添加到您的 .vimrc 中(我也将其保存在我的内部 - 您可以从我的 rtp 示例中推断出来):

    if has('win32') || has('win64')
      set runtimepath^=~/.vim
      set runtimepath+=~/.vim/after
    endif
    

    此 sn-p 将确保跨平台的一致性。即使在 Windows 中,您现在也可以使用类 Unix 目录 .vim 而忘记 vimfiles 废话 - 这是 IMO 丑陋和可怕的。

    然后你打电话:

    call pathogen#infect('plugins') " or wherever your plugins reside
    call pathogen#helptags()        " optional, but really cool
    

    注意: 'plugins' 表示~/.vim/plugins 目录,因此它是~/.vim 的相对目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      相关资源
      最近更新 更多