2013-06-12 27 views
2

我为自己编写了一个(基本的)vim插件,而且我很难组织它。眼下,它生活在两个文件:一个在syntax/,一个在ftplugin/(这两者都是在bundle/<plugin name>我想这个插件是活动的各种文件类型,包括那些与现有的语法文件如何组织具有独特语法元素的vim插件?

。到目前为止,做这样的事情在每个文件的工作:set ft=<existing filetype>.<new filetype>,但我无法弄清楚如何(始终)做到这一点,比如说,从我的.vimrc

于是,两个问题:

  1. 待办事项我有正确的组织方法吗?是否有更简单的方法(比方说)结合语法和插件文件?
  2. 如果是这样,什么是“正确”的方式来追加我的自定义filetype

回答

3

虽然你没有包括很多细节,你说得对,syntax/包含语法定义(即主要是:syntax命令)和ftplugin/是特定文件类型设置(即主要是:setlocal:map <buffer>等。 )。

我希望这个插件可以用于各种文件类型,包括那些现有的语法文件。

正确的方法很大程度上取决于原始语法与您的语法之间的关系。很难扩展任意语法,因为您必须考虑重叠并在语法扩展中使用适当的containedin=...说明符。

复合文件类型:setl filetype=c.doxygen自动检测或手动设置时效果很好。如果您不希望扩展程序如此可见(并且某些插件不能很好地处理复合文件类型),则可以在所有~/.vim/after/syntax/original.vim文件中选择:runtime syntax/mine.vim(对于ftplugin/执行相同的操作)。

另一种选择是钩入:autocmd Syntax ...:autocmd FileType ...;这样可以避免编写很多简短的存根文件,这些文件只是您的语法/ ftplugin添加内容的:runtime

+0

因此,假设我有正确的组织方法,我需要帮助一致地设置复合文件类型。我有'autocmd BufRead,BufNewFile *行。 setlocal ft = '在我的.vimrc中,这似乎工作。我是否需要为每个文件类型添加一行,我希望我的插件处于活动状态? – Chris

+0

用这种方法,你绕过了原始的文件类型检测(即从'*。'到'',并且将不得不复制所有东西。更好地挂钩到'autocmd FileType'事件中(这是由原始检测),然后有条件地追加你的filetype(它再次触发事件,所以检查现有的''!) –

+0

对不起,我不明白你的意思是“挂钩到'autocmd FileType'事件。你可以更具体一些,或者提供一个例子吗?谢谢 – Chris