我了解它会加载ftplugin.vim文件,但它实际上是做什么的?是否设置选项(取决于文件类型)?

如果我要在vimrc的开头包含这一行

filetype plugin indent on


和然后我在这行之后设置一些选项(例如autoindent,smartindent等),会与它们混淆吗?我怎么知道哪些选项受文件类型插件或缩进文件的影响?

#1 楼

help filetype中实际上有一个很好的描述。

为文件类型定义的任何选项都将使用setlocal设置:

:setl[ocal] ...     Like ":set" but set only the value local to the
                    current buffer or window.  Not all options have [..]


例如/usr/share/vim/vim80/ftplugin/javascript.vim定义:

setlocal commentstring=//%s


因为本地选项的优先级高于全局选项,所以您的.vimrc设置可能会被忽略。在这种情况下,您需要创建一个文件~/.vim/after/ftplugin/javascript.vim(具有要更改的文件类型的名称),并在其中设置自己的setlocal选项。

查看设置哪些选项的最简单方法是:只需打开/usr/share/vim/vim80/ftplugin../indent../syntax中文件类型的文件即可。

评论


E492:不是编辑器命令:插件在[缩进相同]

–托尼
18年5月15日在1:23



这个答案的最后一句话是错误的。开启文件类型插件和开启文件类型缩进确实是单独的命令,但是可以将两者结合使用以产生文件类型插件缩进。

–俄罗斯
19-10-1在8:50



@Ruslan谢谢,我删除了那句话。

–laktak
19-10-1在13:33

#2 楼

它定义了自动命令,当打开与给定模式匹配的文件时,将执行这些命令。这些自动命令source依次与已识别的文件类型相关联的文件类型插件。

在那些文件类型插件脚本中,您将能够找到/编写可放入vim脚本中的任何内容。优良作法不是永远不定义全局事物,而只定义局部事物。 ie:


带有:setlocal opt=value的本地选项

带有:[cnivsxot](nore)map <buffer> ...的本地映射

:iab-<buffer> ...和co
:command -b ...

带有:let b:var = 42的局部变量


关于


菜单,您必须使用可模拟的插件本地菜单,请参阅Michael Geddes的插件或我的现代化fork;
功能,您可以将它们放在ftplugins中,但是最好在自动加载插件中定义它们。