如果我通过链接在vim中有一个现有的突出显示组,例如
hi link my_highlight_group my_default_color
是否可以在不更改my_default_color的情况下将'bold'添加到my_highlight_group?以下不起作用:
hi my_highlight_group gui=bold
令人惊讶的是,如果直接定义my_highlight组(不是通过链接),我可以添加粗体:
hi my_highlight_group guifg=#F0000
hi my_highlight_group gui=bold
答案 0 :(得分:9)
正如“太多的PHP”所说,没有直接的方式来说“创造一个看起来像那个并加上粗体的价值”。最好的方法是修改配色方案。如果您没有使用自定义配色方案,请将主vim安装目录中的一个复制到〜/ .vim / colors目录并编辑它以适合您。或者,搜索vim脚本页面并尝试其中一些可用的内容。
无耻插件:如果你想要一个比标准格式更容易编辑的插件,请试试我的"Bandit" colour scheme。
如果确实希望能够动态添加粗体,则需要一个相当复杂的脚本,如下所示。请注意,除非您在加载配色方案后自动调用或执行以下操作,否则不会为下次会话保存此内容:
:autocmd ColorScheme AddBoldToGroup my_highlight_group
所有这些剧本的剧本如下。据我所知,没有明显更快的方法!显然,您可以通过编写较少详细的代码来保存几行,但重复使用redir
和silent hi
的一般想法是唯一的方法。
" Call this with something like
"
" :AddBoldToGroup perlRepeat
"
command! -complete=highlight -nargs=1 AddBoldToGroup call AddBoldToGroup(<f-args>)
function! AddBoldToGroup(group)
" Redirect the output of the "hi" command into a variable
" and find the highlighting
redir => GroupDetails
exe "silent hi " . a:group
redir END
" Resolve linked groups to find the root highlighting scheme
while GroupDetails =~ "links to"
let index = stridx(GroupDetails, "links to") + len("links to")
let LinkedGroup = strpart(GroupDetails, index + 1)
redir => GroupDetails
exe "silent hi " . LinkedGroup
redir END
endwhile
" Extract the highlighting details (the bit after "xxx")
let MatchGroups = matchlist(GroupDetails, '\<xxx\>\s\+\(.*\)')
let ExistingHighlight = MatchGroups[1]
" Check whether there's an existing gui= block
let MatchGroups = matchlist(ExistingHighlight, '^\(.\{-}\) gui=\([^ ]\+\)\( .\{-}\)\?$')
if MatchGroups != []
" If there is, check whether "bold" is already in it
let StartHighlight = MatchGroups[1]
let GuiHighlight = MatchGroups[2]
let EndHighlight = MatchGroups[3]
if GuiHighlight =~ '.*bold.*'
" Already done
return
endif
" Add "bold" to the gui block
let GuiHighlight .= ',bold'
let NewHighlight = StartHighlight . GuiHighlight . EndHighlight
else
" If there's no GUI block, just add one with bold in it
let NewHighlight = ExistingHighlight . " gui=bold"
endif
" Create the highlighting group
exe "hi " . a:group . " " NewHighlight
endfunction
答案 1 :(得分:2)
更改链接到另一个组的组的属性将断开链接。 AFAIK没有简单的方法可以将my_default_color
的颜色复制到my_highlight_group
。您只需手动复制颜色值即可。
这应该不是一个大问题,你应该在colorscheme文件中定义所有的高亮组,所以只需将它们放在一起:
hi my_default_color guifg=#000088
hi my_highlight_group guifg=#000088 gui=bold
答案 2 :(得分:0)
假设您只想要一种语法类型,您应该只创建一个新的组名my_bold_default_color,并将bold属性应用于该名称。