2010-12-28 14 views
3

私は別のファイルタイプごとに異なるcolorschemesを使用したいと私は、これは一つの問題で正常に動作します異なるウィンドウに異なるcolorschemesを適用

function SetColorScheme() 
    if &filetype != "vo_base" 
    colorscheme desertEx 
    endif 
endfunction 
au WinEnter * call SetColorScheme() 

私の.vimrcに次のコードを追加しました。

たとえば、todo.otl(vo_base)を開いて、次のように別のファイル(example.xmlなど)を開きます。sp the colorscheme desertExは2番目のウィンドウに適用されません.xml)。

WinEnterの代わりにBufEnterを使用する場合、desertExは両方のウィンドウに適用されます。

上記の関数(a)が実行され、(b)がその特定のウィンドウでのみ実行され、現在のセッションではすべてのウィンドウではなく、spでウィンドウを開くときに確認する方法はありますか?

答えて

4

いいえこれを行う方法はありません。 vimでは、同時にアクティブなcolorschemeが1つしか存在しません。

1

何かが気になるのは、Vim構文ファイルの低レベルの構文グループを直接指す配色を作成することです。

C言語用のc.vimを例にとります。場合は、だから、

cStatement、clabelが、cConditional、cTypeと...などテイクpython.vim、あなたがなどpythonDefStatement、pythonFunction、pythonConditionalを見つけるでしょう。..

:あなたのようなインスタンスの構文hightlightingグループを見つけるだろうCコードとPythonに異なる色のスキームを使いたい場合は、2つのオリジナルのカラースキームを〜/ .vim/colors/mycolorscheme.vimにコピーし、それらを編集して一般的な高レベルではなく低レベルの構文グループを指すようにします多くの利用可能なカラースキームに見られるComment、Constant、Error、Identifierなどのグループ。

CやPythonコードが含まれていないファイルの構文ハイライトを処理するために、これらの他の2つの行の上にデフォルトの 'highlight'ステートメントを置いておきたいことに注意してください。明確にするために

、あなたが有名な「Hello Worldの」コードを編集し、Vimのコマンドラインから次を発行します。

:hi cInclude ctermfg=cyan guifg=cyan 

あなたはカラースキームを変更していない、他のウィンドウやタブに表示される他のファイルがあります影響を受けず、 '#include'は異なる色で表示されるようになりました。

この機能が絶対に必要な場合を除き、Vimの構文の強調表示がかなり損なわれているので、私はそれに反対します。さらに、通常は低レベルの構文強調グループが多数存在するため、元のカラースキームに含まれる既存の ':hi'ステートメントを変換するためにはかなりの作業が必要になります。

言語固有の低レベルグループを、各言語固有の高レベルグループにリンクする方が、多少優れています。これにより、カスタムカラースキームファイルを適度に小さく保つのに役立ちますが、追加の在庫作業が必要になります。