3

我在 Ubuntu linux 上使用 Vim 7.3。

当我编辑 YAML 文件时

This:
    fnordy fnord: fnord
    fnords: super fnord

“fnords”会被着色,但“fnordy fnords”不会。

fnords 然后 fnord fnord

fnord fnord 然后 fnord

我怎样才能解决这个问题?我正在查看我的/usr/share/vim/vim73/syntax/yaml.vim文件,但我对它的理解不足以解决这个问题。

更新

:color 
slate

:echo &ft
yaml

On fnord: fnordy(在行首):yamlBlockMappingKey

On fnordy fnord: fnord(在行首):yamlPlainScalar

4

3 回答 3

2

在 steffen 的帮助下,我比较了两个解析命令。

当前脚本如下所示:

execute 'syn match yamlBlockMappingKey /^\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ '.
            \'nextgroup=yamlKeyValueDelimiter'

具体来说,问题是s:ns_plain_out,它是一个非空间模式

所以我将模式更改为简单地匹配任何字符:

execute 'syn match yamlBlockMappingKey /^\s*\zs.*\ze\s*:\%(\s\|$\)/ '.

这解决了这个特定问题。

于 2012-11-21T20:40:04.547 回答
1

根据YAML 规范,空格是映射键中的有效字符。看看规范中的 3.2.1.1 和这个例子

我会说突出显示是正确的。您在使用引号的第一个值中有一个无意义的换行符(就像在这个例子中一样)。

于 2012-11-21T08:52:37.333 回答
1

基于公认的答案,这是我在 .vimrc 中放入的内容,无需编辑任何核心 vim 文件即可获得此修复:

autocmd FileType yaml execute
      \'syn match yamlBlockMappingKey /^\s*\zs.*\ze\s*:\%(\s\|$\)/'
于 2014-03-28T13:53:36.063 回答