vim のカラースキームをはてなダイアリーで

vim のカラースキームを、はてなダイアリーシンタックスハイライト用の CSS に変換する vim スクリプトを書いてみました。

fun! s:showHatenaCSS()
  let high_names =
      \ ["Normal","Special","Type","Comment","PreProc","Identifier","Constant","Statement"]

  let high_pairs = {}

  for name in high_names 
    let fg = synIDattr(synIDtrans(hlID(name)),"fg#","gui")
    let bg = synIDattr(synIDtrans(hlID(name)),"bg#","gui")
    if fg != "" || bg != ""
      let high_pairs[name] = [fg,bg]
    endif
  endfor

  new
  for key in keys(high_pairs)
    let fg = high_pairs[key][0]
    let bg = high_pairs[key][1]
    let fg_elt = (fg == "") ? "" : printf("color : %s;",fg) 
    let bg_elt = (bg == "") ? "" : printf("background-color : %s",bg)
    if key == "Normal"
      let key = "tax-highlight" " too adhoc ...
    endif
    let line = printf(".syn%s { %s %s }\n",key,fg_elt,bg_elt)
    exec "normal a" . line
  endfor
  set nomodified
endf
call s:showHatenaCSS()

使いかた:

  1. 上のリストを適当な名前のファイルに保存する。
  2. gvimvim -g でそのファイルを開く。
  3. 好きなカラースキームを設定する(例: colo blue)。
  4. :so % するとウィンドウが分割するので、その内容をはてなダイアリーの「詳細デザイン設定」の「スタイルシート」のところにコピペ。

上の vim スクリプトのハイライトは desert を使ってみました。リストや辞書使ってるので vim7.0 が必要です。morning を使ったときは次のような出力になります。

.synComment { color : #0000ff;  }
.syntax-highlight { color : #000000; background-color : #e5e5e5 }
.synStatement { color : #a52a2a;  }
.synIdentifier { color : #008b8b;  }
.synSpecial { color : #6a5acd; background-color : #f2f2f2 }
.synType { color : #2e8b57;  }
.synConstant { color : #ff00ff; background-color : #f2f2f2 }
.synPreProc { color : #a020f0;  }