【问题标题】:VIM - Syntax classes and colorscheme - Which class controls variable usage delimiters?VIM - 语法类和颜色方案 - 哪个类控制变量使用分隔符?
【发布时间】:2021-07-12 00:26:12
【问题描述】:

这是由“darkbone.vim”配色方案提供的着色示例(更新):

在“TMP=”行中,“${ }”分隔符与“TMP”变量名称不同。这是我想在另一个配色方案文件中复制的内容。

但是,我无法从变量本身(我已将其标识为“PreProc”)中识别出控制分隔符单独的类。

比较不同的文件,我发现darkbone.vim中没有包含“Delimiter”,所以我添加了,指定 guifg=#FF0000 ,但是没有对测试文件的全屏显示进行可识别的更改,其中分隔符和“调用”变量名称具有相同的颜色。

有人知道如何控制分隔符吗?

'scriptnames' 报告如下:

如果它能让事情变得更容易,这是我的草稿颜色方案文件:

"################################################################################################
" This Colour Scheme is NOT part of the VIM distribution
" This Colour Scheme is under development
"################################################################################################
"
" Name:     OASIS_darkbone.vim
" Maintainer:   Eric Marceau
" Last Change:  2021-04-16
" Revision: 0.1

set background=dark
hi clear
if exists("syntax_on")
  syntax reset
endif
let g:colors_name = 'OASIS_darkbone'

""" Trying to identify Class in darkbone.vim controlling variable ${ } displayed using #CD5C5C IndianRed  and TMP showing using #98FB98 PaleGreen

"################################################################################################

"""""""""""""" Group 0  (baseline specification)
hi Normal       guifg=#AFAFAF   guibg=#000000   gui=none        "Confirmed -- All text not mapped to any Syntax Class

"""""""""""""" Group 1
hi Identifier       guifg=#CF9F00   guibg=#000000   gui=bold        "Confirmed -- Variable_DEFINE
hi Statement        guifg=#30BB30   guibg=#000000   gui=bold        "Confirmed -- Flow Control and some commands: while, for, do, done, case, esac, if, then, else, fi, sort, grep, echo, cat, exit, shift, rm,
hi PreProc      guifg=#EFEF8F   guibg=#000000   gui=none        "Confirmed -- Variable_CALL (i.e. ${VAR} )
hi Special      guifg=#FFFFFF   guibg=#000000   gui=none        "Confirmed -- Backquote clauses, EscapeSequences, i.e. "\n, \0, %d, %s, etc...
hi Function     guifg=#4F4FFF   guibg=#000000   gui=bold        "Confirmed -- Function definition wrapper
hi MatchParen       guifg=#000000   guibg=#BBBB00   gui=none        "Confirmed -- Blink on matching parenthesis/brace
"hi Tags        guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified



"""""""""""""" Group 2
hi Comment      guifg=#5F5F9F   guibg=#000000   gui=italic      "Confirmed -- "ctermfg=Brown ctermbg=Black
"hi SpecialComment  guifg=#FF0000   guibg=#000000   gui=italic          "Context was not identified
hi Visual       guifg=#000000   guibg=#707090   gui=none            "Context was not identified
hi VisualNOS        guifg=#9F9FBF   guibg=#000000   gui=none            "Context was not identified
hi Search       guifg=#000000   guibg=#c0c0ff   gui=none            "Context was not identified
hi IncSearch        guifg=#000000   guibg=#c0c0ff   gui=none            "Context was not identified


"""""""""""""" Group 3
hi LineNr       guifg=#6F6F9F   guibg=#000000   gui=none        "Confirmed -- when displayed, number column on left
hi Error        guifg=#ee1111   guibg=#000000   gui=none        "Confirmed -- Error line displayed at bottom
hi StatusLine       guifg=#CFCF4F   guibg=#1F1F4F   gui=bold        "Confirmed -- detailed status line
hi StatusLineNC     guifg=#606080   guibg=#000000   gui=bold,underline      "Context was not identified
hi WarningMsg       guifg=#EFCF8F   guibg=#000000   gui=none            "Context was not identified
hi MoreMsg      guifg=#9F9FBF   guibg=#000000   gui=none            "Context was not identified
hi ErrorMsg     guifg=#FF8F8F   guibg=#000000   gui=none            "Context was not identified
hi ModeMsg      guifg=#9F9FBF   guibg=#000000   gui=none            "Context was not identified
hi WildMenu     guifg=#000000   guibg=#c0c0ff   gui=none            "Context was not identified
hi VertSplit        guifg=#606080   guibg=#606080   gui=none            "Context was not identified
hi Todo         guifg=#8090f0   guibg=#000000   gui=none            "Context was not identified
hi Title        guifg=#c0c0ff   guibg=#000000   gui=bold            "Context was not identified
hi Question     guifg=#9F9FBF   guibg=#000000   gui=none            "Context was not identified
hi Directory        guifg=#e0e0ff   guibg=#000000   gui=bold            "Context was not identified
hi NonText      guifg=#606080   guibg=#101020   gui=none            "Context was not identified
hi SpecialKey       guifg=#404060   guibg=#000000   gui=none            "Context was not identified


"""""""""""""" Group 4
hi CursorLine               guibg=#181818               "Confirmed -- Display controlled in vimrc
hi CursorColumn             guibg=#181818               "Confirmed -- Display controlled in vimrc
hi Cursor       guifg=#000000   guibg=#FF9F1F               "Confirmed -- Current position, normal
"hi iCursor     guifg=#000000   guibg=#C08020                   "Context was not identified
"hi nCursor     guifg=#000000   guibg=#C08020                   "Context was not identified
"hi rCursor     guifg=#000000   guibg=#C08020                   "Context was not identified
"hi lCursor     guifg=#000000   guibg=#C08020                   "Context was not identified
"hi CursorIM        guifg=#000000   guibg=#C08020                   "Context was not identified


"""""""""""""" Group 5
hi Number       guifg=#FF4F1F   guibg=#000000   gui=none        "Confirmed -- Numbers assigned or used
hi String       guifg=#D88F9F   guibg=#000000   gui=none        "Confirmed -- String text and all within awk command quotes
hi Char         guifg=#00FFFF   guibg=#000000   gui=none            "Context was not identified
hi Boolean      guifg=#d0e080   guibg=#000000   gui=none            "Context was not identified
"hi Constant        guifg=#000000   guibg=#FFAFAF   gui=none            "Context was not identified
"hi Float       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified


"""""""""""""" Group 6      (Either     - in original and not used, or 
""""""""""""""                  - harvested from other schemes and not pidgeonholed )
"" Associated with Statement
hi Operator     guifg=#EFEF8F   guibg=#000000   gui=bold        "Confirmed -- Quotes, semicolon ; pipe, Brackets
"hi Conditional     guifg=#FF0000   guibg=#000000   gui=bold        "Confirmed -- do, done, if, then, else, fi; NB overrides default Statement class
"hi Keyword     guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Exception       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Repeat      guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Label       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified


"" Association TBD
"hi Delimiter       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Subtitle        guifg=#c0c0ff   guibg=#000000   gui=italic          "Context was not identified
"hi Ignore      guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Debug       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Underlined      guifg=#9F9FBF   guibg=#000000   gui=underline           "Context was not identified
"hi AltFunction     guifg=#4F4FFF   guibg=#000000   gui=bold            "Context was not identified
"hi AltConstant     guifg=#000000   guibg=#FFAFAF   gui=none            "Context was not identified
"hi Unique      guifg=#000000   guibg=#FFAFAF   gui=none            "Context was not identified
"hi AltUnique       guifg=#000000   guibg=#FFAFAF   gui=none            "Context was not identified
"hi SignColumn              guibg=#000000   gui=none            "Context was not identified


"" Associated with Special
"hi SpecialChar     guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified


"" Associated with Type
"hi Type        guifg=#e0e0ff   guibg=#000000   gui=none            "Context was not identified
"hi AltType     guifg=#e0e0ff   guibg=#000000   gui=none            "Context was not identified
"hi StorageClass    guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Structure       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Typedef     guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified


"" Associated with PreProc
"hi Include     guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Define      guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi Macro       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified
"hi PreCondit       guifg=#FF0000   guibg=#000000   gui=none            "Context was not identified


"""""""""""""" Group 7 (suppressed for impact assessment)
" Diff
"hi DiffAdd     guifg=#8090f0   guibg=#000000   gui=none            "Context was not identified
"hi DiffChange      guifg=#8090f0   guibg=#000000   gui=none            "Context was not identified
"hi DiffDelete      guifg=#8090f0   guibg=#000000   gui=none            "Context was not identified
"hi DiffText        guifg=#8090f0   guibg=#000000   gui=bold            "Context was not identified


"""""""""""""" Group 8
" Folds
hi Folded       guifg=#9F9FBF   guibg=#000000                   "Context was not identified
hi FoldColumn       guifg=#9F9FBF   guibg=#102010                   "Context was not identified


"""""""""""""" Group 9
"if version >= 700
"  " Pmenu - Popup Completion Menu
"  hi Pmenu     guifg=#9F9FBF   guibg=#202040   gui=none            "Context was not identified
"  hi PmenuSel      guifg=#9F9FBF   guibg=#404080   gui=underline           "Context was not identified
"  hi PmenuSbar     guifg=#202040   guibg=#202040   gui=none            "Context was not identified
"  hi PmenuThumb    guifg=#202040   guibg=#202040   gui=none            "Context was not identified
"
"  " Tab
"  hi TabLine       guifg=#606080   guibg=black gui=underline           "Context was not identified
"  hi TabLineFill   guifg=#9F9FBF   guibg=black gui=none            "Context was not identified
"  hi TabLineSel    guifg=#c0c0ff   guibg=#606080   gui=bold            "Context was not identified
"endif


"""""""""""""" Group 10     (for future consideration)
" cool help screens     (from 'anotherdark.vim)
" :he group-name
" :he highlight-groups
" :he cterm-colors


"""""""""""""" Group 11     (for future consideration)
" vim:set ts=8 sts=2 sw=2 tw=0:

【问题讨论】:

    标签: vim syntax vim-syntax-highlighting


    【解决方案1】:

    语法高亮分两步完成:

    1. 高亮组是使用“语法脚本”中的正则表达式定义的,并且通常链接到更通用的组,
    2. 视觉属性分配给颜色方案中的突出显示组。

    这样做的最直接后果是颜色方案无法突出显示不存在的突出显示组。

    这导致了我们的下一个问题:根据sh 文件类型的默认语法脚本...

    • ${ 属于 shDerefPreProc 组,
    • TMP 属于shDerefshDerefVar
    • } 属于PreProc
    • 它们都解析为PreProc 高亮组。

    意味着your colorscheme in its current formsh 的默认语法脚本无法以不同方式突出显示${}TMP

    下面是您的脚本的前两行与darkbone.vimsh 的默认语法脚本的外观:

    这是你的截图:

    你会注意到有很多差异。

    因此,如果您的颜色方案和默认语法脚本都将 ${TMP} 视为属于 PreProc 突出显示组的单个“块”,那么您可能正在使用不这样认为的第三方语法脚本。

    此外,在您的配色方案中,唯一以橙色突出显示的突出显示组是 Function,因此在某处肯定有某种东西以某种方式覆盖了默认突出显示组。

    FWIW,您可以使用以下命令来识别光标下项目的高亮组:

    command! SynStack echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
    

    【讨论】:

    • 我尝试了你在底部提供的命令,无论是带有“command!”前缀还是没有它,我都没有得到第一个可感知的操作,并且错误消息“E488:尾随字符”对于后者。
    • 我已经隐藏了我从 ~/.vim/syntax 制作的 bash.vim 和 sh.vim 的副本。我仍然得到相同的结果。
    • 谢谢你,罗曼尼。这是一个非常有用的sn-p。当我解决我的问题时,我会通知你。
    • 所以......显然,当使用 ScrollColors 循环浏览各种颜色方案文件时,vim.org/scripts/script.php?script_id=1488,很明显在用于显示的颜色方案文件之间没有完全重置(即使)这些文件在开始时确实有重置行!所以......一些语法类继承了以前方案中定义的颜色,并应用了这些颜色!很混乱。为 ${TMP} 显示这种双色组合的事实意味着必须有一种方法来控制它。我将通过反复试验继续搜索。
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多