neovim只在具有特定扩展名的文件中突出显示sytax(不论文件类型)

时间:2017-05-17 18:20:44

标签: vim neovim

我有两个内容相同的文件:index.html.erbindex.html.ecr

在nvim中输入:set ft?会在两者中返回filetype=eruby

我正在运行一些插件,包括:vim-railsvim-crystal

我尝试重新启用语法并重新打开。

以下是index.html.{erb, ecr}文件的内容:

<!doctype html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="/css/style.css">
        <meta charset="UTF-8">

突出显示的屏幕截图:

enter image description here

1 个答案:

答案 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