仅为没有扩展名的文件设置vim文件类型

pep*_*ico 5 vim

如何为vim中没有扩展名的文件设置文件类型和/或语法?

注意

对于没有扩展名的文件,这是vim默认语法的副本.我再问一次,因为在我看来,没有人能正确回答.

我不想知道如何为无法识别的文件类型设置默认语法,我想知道如何仅为无扩展文件设置它.

Seb*_*olm 8

您可以创建一个自动命令来检查文件名是否包含.,如果不包含,则切换到给定的语法:

autocmd BufNewFile,BufRead * if expand('%:t') !~ '\.' | set syntax=perl | endif
Run Code Online (Sandbox Code Playgroud)

这个选择perl作为默认语法,但您可以简单地使用适当的.

  • 使用`expand()`函数,可以直接从文件名中提取扩展名.因此,测试也可以写成`expand('%:e')!=''`. (2认同)

Geo*_*edy 5

:help ftdetect 将展示 vim 文档中关于如何编写文件类型检测脚本的部分。

以下是我对这种情况的建议:

创建一个~/.vim/ftdetect以您的文件类型命名的文件,例如myfiletype.vim.

在这个文件中放

au BufRead,BufNewFile * if expand('<afile>:e') == '' | set ft=myfiletype | end
Run Code Online (Sandbox Code Playgroud)

这将导致 vim 将没有任何扩展名的文件的文件类型设置为myfiletype. 如果你想,如果没有其他文件类型检测用它来只用于setfiletype myfiletype代替set ft=myfiletype

然后创建语法文件~/.vim/syntax/myfiletype.vim。这只是一个普通的 vim 语法定义文件,没什么特别的。如果您不想创建自己的文件类型,只需在自动命令中使用普通文件类型而不是 myfiletype。例如

au BufRead,BufNewFile * if expand('<afile>:e') == '' | set ft=html | end
Run Code Online (Sandbox Code Playgroud)

将设置将加载 html 语法文件的 html 文件类型。