Vim:如何仅突出显示特定语法区域中的关键字

时间:2015-10-19 17:56:13

标签: vim vim-syntax-highlighting

我正在尝试向sqloracle.vim添加一组仅适用于外部表的关键字。有很多关键字,如“big”和“csv”只对外部表有意义,所以我想我可以为它定义一个区域,只在其中突出显示它们。

例如,

syn keyword sqlXTType     contained    big endian csv date_format little 
syn keyword sqlXTKeyword  contained    access are blanks data default delimited enclosed field[s] location missing newline reject parameters position terminated whitespace
syn region  sqlXTParams   transparent  matchgroup=sqlKeyword start=+\<organization\s\+external\>+ end=+)+ contains=sqlXTType,sqlXTKeyword,Comment

" Some highlighting rules (not my actual colour scheme!)
hi sqlKeyword    gui=BOLD guifg=DarkBlue guibg=NONE 
hi sqlType       gui=BOLD guifg=DarkCyan guibg=NONE 
hi sqlXTType     gui=BOLD guifg=DarkMagenta guibg=NONE 
hi sqlXTKeyword  gui=BOLD guifg=DarkRed guibg=NONE 

以下是我希望它使用的语法示例。我故意使用像“参数”和“位置”这样的表和列名,它们只在外部表的上下文中是SQL关键字。我想只在“组织外部”条款中突出显示它们。

create table parameters
( position     number(4)
, date_format  varchar2(20)
, terminated   char(1)
, start_date   date
, values       varchar2(200) )
organization external
( type oracle_loader
  default directory nfs_dir
  access parameters
  ( records delimited by newline
    missing field values are null
    fields terminated by "," optionally enclosed by '"' ldrtrim 
    all fields override
    reject rows with all null fields 
    ( pos, dt, xxx
    , start_dt char(21) date_format date mask "dd-mon-yyyy hh24:mi:ss"
    , zzz )
  )
  location ('dummy.dat')
)
parallel 1
reject limit unlimited;

然而,任何开放括号似乎都会触发sqlXTParams区域的开始(除了“组织外部”之外),并且没有任何内容终止它。我怀疑Vim的语法区域实现是期望通常与括号或引号配对的东西,而不仅仅是任何旧的文本,如“组织外部”直到结束括号,在这种情况下,这是无法完成的。

btw我正在使用此提示来识别突出显示组: http://vim.wikia.com/wiki/Identify_the_syntax_highlighting_group_used_at_the_cursor

0 个答案:

没有答案