0

どんな助けでも大歓迎です。私は以下を使用しています:

let g:usefulstatusline_normal=call(exe, ['hi StatusLine'], {})

そして私は得る:

E15: Invalid expression: call(exe, ['hi StatusLine'], {})

私は何を間違っていますか?それはおそらく明らかなことだと思います。

私が達成しようとしているのは、現在のカラースキームのステータスラインの色などを取得し、それを変数に含めることです。後で再利用できるように。

また、これをより良い方法で達成するためのヒントもいただければ幸いです。

完全なコードが必要な場合は、次のファイルにアクセスしてください: https://github.com/Greduan/vim-usefulstatusline/blob/master/autoload/usefulstatusline_colorize.vim

ここでは上部を無視します。これはテスト目的のためだけにあります。:)

4

2 に答える 2

4

ここでの問題は、の出力が必要なことです:highlight command。式の左側にある何かに割り当てることができる値を返す vim の関数とは異なり、このコマンドはその出力をエコーし​​ます。このような場合、次のように、一時的に出力を変数にリダイレクトしてから、通常の出力を復元する必要があります。

redir => g:usefulstatusline_normal
silent! exec 'hi StatusLine'
redir END

コマンドが出力できる可能性のある値は:highlight、単一行の存在しない強調表示グループのエラー、または改行と出力のいずれかであるため、上記の例よりも少し多くの作業を行う必要があることに注意してください。

" Returns: hl group value or '' on nonexistent highlight group
" Usage: let foo = GetHL('StatusLine')
function! GetHL(grp)
  redir => hlOutput
  silent! exec 'hi '.a:grp
  redir END
  let hlVal = matchstr(hlOutput, '\v%(\nStatusLine\s+xxx\s+)@<=.*')
  return hlVal
endfunction
于 2013-01-30T03:57:07.060 に答える