如何为vim中没有扩展名的文件设置文件类型和/或语法?
注意
这是vim default syntax for files with no extension的副本。我再问一次,因为在我看来,没有人能正确回答。
我不想知道如何为无法识别的文件类型设置默认语法,我想知道如何只为无扩展文件设置它。
答案 0 :(得分:8)
您可以创建一个自动命令来检查文件名是否包含.
,如果没有,则切换到给定的语法:
autocmd BufNewFile,BufRead * if expand('%:t') !~ '\.' | set syntax=perl | endif
这个选择perl
作为默认语法,但你可以简单地使用适当的。
答案 1 :(得分: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
答案 2 :(得分:3)
: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文件类型。
答案 3 :(得分: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
而不仅仅是检查尾部是否缺少.
。这样可以避免将几个非cpp文件设置为来自CommandT的COMMIT_EDITMSG
,README
,GoToFile
和来自NERD树的NERD_tree*
。
修改强>
我只是放弃了这个想法。