我想在创建特定文件类型的新文件时运行一些 vim 命令,类似于 BufNewFile
和 FileType
自动命令事件的组合。
我在 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”,它不会运行自动命令。它运行 ftplugin 文件中的其他命令(例如,我得到“Spice 文件”回显)但不运行自动命令。
或者,如果 vimscript 中有某种方法可以判断文件是否新,那么我可以直接在 ftplugin 中运行命令,条件是它是否是新的。
最佳答案
ftplugin 文件中的 BufNewFile
自动命令不起作用,因为事件顺序错误。 BufNewFile
触发 FileType
,而不是相反。
您可以将 au BufRead,BufNewFile
拆分为两个单独的命令,并在第一个命令中设置缓冲区局部变量 b:isNew
。
但我认为检查您的 ftplugin 文件是否是新文件确实是最简单的。由于这取决于编辑的文件是否已存在于磁盘上,因此应该使用像这样的简单条件:
if filereadable(expand('%'))
" BufRead
else
" BufNewFile
endif
关于vim - 特定文件类型的新文件的自动命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23496243/