“文件类型插件”的真正作用是什么?


11

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

如果我要在vimrc的开头加入这一行

filetype plugin indent on

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

Answers:


7

实际上在中有一个很好的描述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


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

这个答案的最后一句话是错误的。filetype plugin onfiletype indent on的确是单独的命令,但可以将两者组合起来产生filetype plugin indent on
罗斯兰

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

2

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

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

  • 本地选项 :setlocal opt=value
  • 本地映射 :[cnivsxot](nore)map <buffer> ...
  • :iab-<buffer> ...&co的本地缩写
  • 本地命令 :command -b ...
  • 局部变量 :let b:var = 42

关于

  • 菜单,您将不得不使用模拟本地菜单的插件,请参阅Michael Geddes的插件或我现代化的fork
  • 函数,可以将它们放在ftplugins中,但是最好在自动加载插件中定义它们。
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.