我有两个内容相同的文件:index.html.erb
和index.html.ecr
。
在nvim中输入:set ft?
会在两者中返回filetype=eruby
。
我正在运行一些插件,包括:vim-rails
和vim-crystal
。
我尝试重新启用语法并重新打开。
以下是index.html.{erb, ecr}
文件的内容:
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="/css/style.css">
<meta charset="UTF-8">
突出显示的屏幕截图:
答案 0 :(得分:0)
通过在Neovim的默认eruby.vim
语法文件中查找,看来ecr
不是eruby的公认文件类型。除此之外,在测试自己时,当文件的文件类型为ecr
时,键入:set ft?
会将文件类型显示为HTML。
尽管即使将语法和文件类型设置为eruby都可以使用,但与其他语言(如python)不同。我相信这可能是由于eruby语法文件或* vi * s中其他地方的错误所致。如果是eruby.vim
文件中的错误,则维护者为TPope,如果需要的话可以联系。
eruby.vim
的相关部分:
if &filetype =~ '^eruby\.'
let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
if b:eruby_subtype == ''
let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
endif
if b:eruby_subtype == 'rhtml'
let b:eruby_subtype = 'html'
elseif b:eruby_subtype == 'rb'
let b:eruby_subtype = 'ruby'
elseif b:eruby_subtype == 'yml'
let b:eruby_subtype = 'yaml'
elseif b:eruby_subtype == 'js'
let b:eruby_subtype = 'javascript'
elseif b:eruby_subtype == 'txt'
" Conventional; not a real file type
let b:eruby_subtype = 'text'
elseif b:eruby_subtype == ''
let b:eruby_subtype = g:eruby_default_subtype
endif
endif