Python Vim插件don';你不总是装吗?

Python Vim插件don';你不总是装吗?,python,vim,plugins,Python,Vim,Plugins,我试图将autoclose.vim安装到vim。我注意到我没有~/.vim/plugin文件夹,所以我意外地创建了一个~/.vim/plugins文件夹(注意插件中的额外“s”)。然后我将au FileType python set rtp+=~/.vim/plugins添加到my.vimrc中,因为根据我所读的内容,这将允许我自动在该文件夹中获取脚本的源代码 插件没有为我加载,直到我意识到我的错误并从“插件”中取出额外的“s”。我很困惑,因为这个新路径甚至没有在我的运行时路径中定义。我基本上想

我试图将
autoclose.vim
安装到vim。我注意到我没有
~/.vim/plugin
文件夹,所以我意外地创建了一个
~/.vim/plugins
文件夹(注意插件中的额外“s”)。然后我将
au FileType python set rtp+=~/.vim/plugins
添加到my.vimrc中,因为根据我所读的内容,这将允许我自动在该文件夹中获取脚本的源代码

插件没有为我加载,直到我意识到我的错误并从“插件”中取出额外的“s”。我很困惑,因为这个新路径甚至没有在我的运行时路径中定义。我基本上想知道为什么在
~/.vim/plugin
中加载插件,而不是在
~/.vim/plugins
中加载插件?

概述了插件的加载方式


仅向
rtp
添加文件夹是不够的;它必须有一个
插件
子目录。例如,给定
:set rtp+=/tmp/foo
,将检测并加载一个文件
/tmp/foo/plugin/bar.vim
,但既不是
/tmp/foo/plugins/bar.vim
也不是
/tmp/foo/bar.vim

设置rtp+=…
的方法是正确的,但还有更多的地方(
rtp
是非递归的,有助于索引,很多情况下都是死角),所以自己做不是一个好主意。除非你已经准备好面对长达数月的生产率下降


如果你想将所有插件存储在一个特殊的目录中,你应该使用一个合适的
runtimepath
/plugin管理解决方案。我建议使用(
rtp
-manager)或(plugin manager),但还有很多其他方法。

所有文件夹都在
rtp
(runtimepath)中选项需要与您的
$VIMRUNTIME
具有相同的文件夹结构(
$VIMRUNTIME
通常是
/usr/share/vim/vim{version}
)。因此它应该具有相同的子目录名称,例如
自动加载
文档
插件
(无论您需要,但具有相同的名称是关键)。插件应位于其相应的子目录中

假设你有
/path/to/dir
(在你的例子中是
~/.vim
)在你的
rtp
vim

  • /path/to/dir/plugin
  • /path/to/dir/ftplugin
  • /path/to/dir/syntax
  • /path/to/dir/doc
等等

vim
只在
/path/to/dir
中查找几个已识别的子目录†。如果其中有一些未识别的子目录名(如
/path/to/dir/plugins
),则
vim
不会看到它


†“已识别”在此表示在
/usr/share/vim/vim{version}中可以找到同名的子目录
或安装了vim
的任何地方。

除了@Nikita Kouevda回答:在
文件类型上修改
rtp
事件可能太晚,vim无法从修改后的运行时路径加载任何插件:如果此事件是在vimrc源代码之后启动的,则不能保证加载新添加的插件;如果此事件是在
VimCenter
事件之后启动的,则可以保证新添加的插件不会自动来源

如果您只想在编辑python文件时源代码自动关闭,则应使用
:au FileType python:source~/.vim/macros/autoclose.vim
(注意:
macros
或除
plugin
$VIMRUNTIME
中找到的目录以外的任何其他子目录,甚至在运行时路径中根本找不到的任何目录)

如果您只想在编辑python文件时使用autoclose,那么应该查看插件源代码和文档,插件端必须有支持才能正常工作


//或者,如果autoclose不支持此操作,请使用上面段落中的
:au FileType
命令,但在
source
前面加上记录vim状态的内容(命令、映射和自动命令),在
源代码
之后追加相同内容,找出状态的差异,如果文件类型不是python,则删除每个
:au BufEnter
上的差异,否则还原它们:黑客攻击,可能会引入奇怪的错误。可能会找到状态记录和差异确定代码的示例。

我很确定这只是因为
~/.vim/plugin
是预定义的,而
~/.vim/plugins
不是。是的,这也是我的猜测。但是,如果我想有一个自定义目录来存储我的插件,我该怎么做呢?我发现加载语言特定插件的一个更简单的方法是将它们放入
.vim/ftplugin
文件夹。因此,如果我只想使用autoclose,然后我会把它放在
ftplugin/python
中。我测试了它,它只对python文件类型有效。你必须在你的.vimrc中有
文件类型插件。对于任何全局插件,我都会把它们放在我的
.vim/plugin
文件夹中。@Fumbster它与
:au filetype
的解决方案完全相同。它会这样做的当你编辑python文件时,你可以使用urce插件,但作为一个全局插件,一旦你找到了它,你将为你编辑的所有后续文件启用它。我强烈建议不要对这些插件使用
ftplugin/python
,因为这是语义冲突:定义全局映射的插件不是文件类型插件,一旦启用,它们将rk表示任何后续加载的文件,因此它们在语义上属于与
matchit.vim
(不是自动加载的全局插件)相同的目录。@Fumbster*I当然意味着“在同一vim会话中编辑的所有后续文件。”有意思。除了手动编辑插件文件上的全局映射之外,没有其他解决方法吗?我只是假设性地问一下,因为我没有实际这样做的意图。对。谢谢你的帮助