如何在 Vim 中正确扩展突出显示组?

发布于 2024-10-20 03:41:31 字数 527 浏览 4 评论 0原文

我想创建一个名为 Italic 的突出显示组,就像 正常,但文本为斜体。目前,我的 Normal 突出显示 设置为

ctermfg=251 ctermbg=234 guifg=#cccccc guibg=#242424

我的问题是:

  1. 是否以正确的方式将 term=italic 添加到 Normal 属性 这样做?

    :hi 斜体 term=斜体 ctermfg=251 ctermbg=234 guifg=#cccccc guibg=#242424
    
  2. 是否可以以通用方式做到这一点,即定义 新的突出显示组可与任何基础组的风格相匹配 配色方案(以上仅适用于我当前的配色方案)? 类似的东西

    :hi Italic 扩展了 Normal term=italic
    

I want to create a highlighting group named Italic to be exactly like
Normal but with text in italic. Currently, my Normal highlighting
is set to

ctermfg=251 ctermbg=234 guifg=#cccccc guibg=#242424

My questions are:

  1. Is adding term=italic to the Normal attributes the right way
    to do that?

    :hi Italic term=italic ctermfg=251 ctermbg=234 guifg=#cccccc guibg=#242424
    
  2. Is it possible to do that in a generic fashion, i.e., define the
    new highlighting group to match the style of the base one for any
    color scheme (the above does only for my current color scheme)?
    Something like

    :hi Italic extends Normal term=italic
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泅人 2024-10-27 03:41:31

要解决此问题,您可以通过脚本创建突出显示组。
下面的函数采用三个字符串参数: 组的名称
突出显示的基础、要创建的组的名称和字符串
包含要添加或覆盖的突出显示属性。

func! ExtendHighlight(base, new, extra)
    redir => attrs | sil! exec 'highlight' a:base | redir END
    let attrs = substitute(split(attrs, '\n')[0], '^\S\+\s\+xxx\s*', '', '')
    sil exec 'highlight' a:new attrs a:extra
endfunc

因此,该调用

:call ExtendHighlight('Normal', 'Italic', 'term=italic')

创建了一个名为 Italic 的新组,该组扩展了 Normal 突出显示
通过 term=italic 属性字符串。

请注意,自定义突出显示组的配色方案保持不变
交换。要纠正此行为,您可以在以下情况下更新组:
当前配色方案更改:

:autocmd ColorScheme * call ExtendHighlight('Normal', 'Italic', 'term=italic')

To solve this issue you can create the highlighting group by script.
The function below takes three string arguments: the name of the group
to base highlighting on, the name of the group to create, and a string
containing highlighting attributes to add or overwrite.

func! ExtendHighlight(base, new, extra)
    redir => attrs | sil! exec 'highlight' a:base | redir END
    let attrs = substitute(split(attrs, '\n')[0], '^\S\+\s\+xxx\s*', '', '')
    sil exec 'highlight' a:new attrs a:extra
endfunc

Thus, the call

:call ExtendHighlight('Normal', 'Italic', 'term=italic')

creates a new group called Italic that extends Normal highlighting
by the term=italic attribute string.

Note that custom highlighting groups remain unchanged on color scheme
switching. To correct this behavior you can update the group when the
current color scheme changes:

:autocmd ColorScheme * call ExtendHighlight('Normal', 'Italic', 'term=italic')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文