自动命令用于特定文件类型的新文件

时间:2014-05-06 13:34:30

标签: vim ftplugin autocommand

我想在创建特定文件类型的新文件时运行一些vim命令,这是BufNewFileFileType自动命令事件的组合。

我在filetype.vim中设置了BufNewFile个自动命令来根据文件扩展名设置文件类型,但我有多个扩展名都对应于相同的文件类型。我想在这一个地方封装有关哪些文件扩展名对应于特定文件类型的信息,然后根据文件类型运行其他自动命令。但是,我不能只使用FileType事件,因为我只想执行新文件的命令,而不是在编辑现有文件时。

例如,在filetype.vim中,我有:

au BufRead,BufNewFile *.cir setfiletype spice
au BufRead,BufNewFile *.sp setfiletype spice
au BufRead,BufNewFile *.spice setfiletype spice

我想也许我可以在ftplugin文件中为这个文件类型添加BufNewFile自动命令,如下所示:

echo "Spice file."
au BufNewFile <buffer> echo "New spice file!"

但是当我创建一个新文件时,例如“test.cir”,它不会运行auto-command。它在ftplugin文件中运行其他命令(例如,我得到“Spice文件。”echo)但不是自动命令。

或者,如果在vimscript中有一些方法我可以判断文件是否是新的,那么我可以直接在ftplugin中运行命令,条件是它是否是新的。

2 个答案:

答案 0 :(得分:4)

ftplugin文件中的BufNewFile自动命令不起作用,因为事件顺序错误。 BufNewFile触发FileType,而不是相反。

您可以将au BufRead,BufNewFile拆分为两个单独的命令,并在第一个命令中设置缓冲区局部变量b:isNew

但我认为检查你的ftplugin确实是否是新的文件确实最容易。因为这取决于编辑的文件是否已经存在于磁盘上,所以这样的简单条件应该是:

if filereadable(expand('%'))
    " BufRead
else
    " BufNewFile
endif

答案 1 :(得分:2)

以下自动命令应该足以根据这三个扩展名设置文件类型:

autocmd BufRead,BufNewFile *.{cir,sp,spice} setlocal filetype=spice

执行自动命令后,会触发FileType事件,Vim知道您正在编辑文件类型spice的文件:您可以自由地在{{1}中放置您想要的任何精美选项/映射}}:

~/.vim/ftplugin/spice.vim

但有些事情并不清楚:您是否希望在创建&#34; spice&#34;时执行特定操作?缓冲区或者您不清楚如何定义文件类型?