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会话中编辑的所有后续文件。”有意思。除了手动编辑插件文件上的全局映射之外,没有其他解决方法吗?我只是假设性地问一下,因为我没有实际这样做的意图。对。谢谢你的帮助