5

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

笔记

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

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

4

4 回答 4

9

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

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

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

于 2012-08-09T19:15:30.187 回答
6

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

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

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

在这个文件中放

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

这将导致 vim 将没有任何扩展名的文件的文件类型设置为myfiletype. 如果您希望仅在未检测到其他文件类型时使用它,请setfiletype myfiletype使用set ft=myfiletype.

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

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

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

于 2012-08-09T19:17:52.747 回答
3
1) Hit escape to make sure you're in normal mode
2) Type ":set syntax=java" (or equivalent language)
3) :set filetype=FILETYPE, where FILETYPE is the filetype.

如果您希望自动执行此操作,请尝试使用上一个答案中的解决方案:

autocmd BufNewFile,BufRead * if expand('%:t') !~ '\.' | set syntax=perl | endif
于 2012-08-09T19:15:18.283 回答
0

最后,我为我的 C++ 配置选择了这个:

let s:reserved = '^NERD_tree\|^GoToFile$'
au BufNewFile,BufRead *
\ if expand('%:e') =~ '^\(h\|hh\|hxx\|hpp\|ii\|ixx\|ipp\|inl\|txx\|tpp\|tpl\|cc\|cxx\|cpp\)$' ||
\    expand('%:t') !~ '\.\|'.s:reserved && expand('%:t') =~ '[a-z]'                            |
\   if &ft != 'cpp'                                                                            |
\     set ft=cpp                                                                               |
\   endif                                                                                      |
\   set syntax=cpp11                                                                           |
\   call CSyntaxAfter()                                                                        |
\ endif

而不是只检查.尾部的缺失。这避免了从 CommandT 和NERD 树设置几个非 cpp 文件,如COMMIT_EDITMSG, 。READMEGoToFileNERD_tree*

编辑

我只是放弃了这个想法。

于 2012-08-16T01:15:35.607 回答