2009-08-25 9 views
4

私はリンクを経由してvimの中の既存のハイライトグループを持っている場合は、例えばvimで既存のハイライトグループを変更するには?

hi link my_highlight_group my_default_color 

はそれがmy_default_colorを変更せずにmy_highlight_groupには「大胆な」を追加することは可能ですか?以下の動作しません。驚くべきことに

hi my_highlight_group gui=bold 

my_highlightグループは(いないリンクを介して)直接定義されている場合、私は大胆に追加することができます。

hi my_highlight_group guifg=#F0000 
hi my_highlight_group gui=bold 

答えて

9

「そのように見える価値を創造し、太字を加える」と言う直接的な方法はありません。最善の方法は、配色を変更することです。カスタムカラースキームを使用していない場合は、メインのvimインストールディレクトリから〜/ .vim/colorsディレクトリにコピーし、それに合わせて編集します。あるいは、vimスクリプトページを検索し、利用可能な多くのものを試してみてください。

恥知らずのプラグ:標準フォーマットより編集しやすいプラグインが必要な場合は、"Bandit" colour schemeをお試しください。

実際にに太字を追加したい場合は、以下のようなかなり複雑なスクリプトが必要です。あなたはがあなたのカラースキームをロードした後かのような何かをすることによって自動的にそれを呼び出さない限り、これはあなたの次のセッションのために保存されないことに注意してください:すべての中

:autocmd ColorScheme AddBoldToGroup my_highlight_group 

スクリプトそれは巨大さを下回っているのです。私が知っている限り、これを行う方法はそれほど速くはありません!明らかに少ないコードを書いて数行を節約することはできますが、redirsilent 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 
+0

恥知らずなプラグイン:あなたがて.vimフォルダに全体colorschemesをコピーしたくない場合は、[このプラグイン](http://www.vim.org/scripts/script.php?script_id=1641) .vim/after/colorsに小さなカスタマイズを加えることができます。そのコードを掲示してくれたブラボー、私はあなたに+4を与えるだろう。 –

+0

@too much php:このプラグインは、リンク(とBravoのための)のおかげでよさそうです – DrAl

+0

この行の前にこのコードを追加してください: "ハイライトの詳細を抽出します(" xxx "の後のビット) あなたがこのコードを必要とするか、そうでなければ、冗長化がオンになっていると正規表現がうまくいきません): "冗長モードのハイライト出力をトリムするには:help highlight-verboseを参照してください: &verbose let GroupDetails = substitute(GroupDetails、 '\\。*'、 ''、 'g'からの '\ s \ + \ Last set') endif – FocusedWolf

0

あなただけの、あなただけの1つの構文タイプのためにこれをしたい必要がありますと仮定すると、新しいグループ名my_bold_default_colorを作成し、それに太字の属性を適用します。

2

リンクされているグループの属性を変更すると、リンクが切断されます。 AFAIKでは、my_default_colorの色をmy_highlight_groupに簡単にコピーする方法はありません。色の値を手作業でコピーするだけです。

これはしかし、大きな問題ではありません、あなたはすべてのあなたのハイライトグループは、あなたのカラースキームファイルで定義されているので、ちょうど隣同士それら二つを置く必要があります。「あまりにも多くのPHP」として

hi my_default_color guifg=#000088 
hi my_highlight_group guifg=#000088 gui=bold 
関連する問題