vim - 特定文件类型的新文件的自动命令

标签 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”,它不会运行自动命令。它运行 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/

相关文章:

vim - 在哪里放置系统范围内特定于语言的 Vim ftplugin .vim 文件

linux - 如何在 Vim 中保存时自动格式化 git mailmap 文件?

vim - 增量改变 vim 中的模式

Vim - 在 mercurial 中显示提交时的差异;

plugins - 在 Vim 中启动后如何手动加载 ftplugin?

vim - 在 Vim 上的新选项卡上打开缓冲区

vim - 突出显示整个当前行

python - 如何使文本环绕匹配 vim 中的当前缩进级别?

html - 如何在 Vim 中编辑 HTML?