vim7の新機能 Omni completion

これヤバス!eclipseなどでおなじみのインテリジェンスな補完を提供する機能みたい。詳しくは:h new-omni-completion で。今のところCとXHTMLCSSしか用意されてないんで、htmlで早速使ってみた。機能はこんな感じ。

  • after "<" complete tag name depending on context (no div suggest inside of an a tag)
    • (全部注釈であって翻訳じゃないよ) <の後でタグ名の補完。子要素として相応しいのしか補完されない。たとえばdivやpタグで囲まれてないのにstrongは補完されることはない。
  • inside of tag complete proper attributes (no width attribute for an a tag)
    • タグのattributesの補完。もちろん適用できる属性だけ。
  • when attribute has limited number of possible values help to complete them
    • 属性の数による補完?(わからない…)
  • complete values of "class" and "id" attributes with data obtained from style tag and included CSS files
    • 読み込んでいるcssのclassとidによるhtmlのインテリジェンス補完
  • when completing "style" attribute or working inside of "style" tag switch to |ft-css-omni| completion
    • style属性もしくはstyleタグで囲まれた部分はcss-omniによるインテリジェンス補完
  • when used after "

正直vimには辞書とバッファ補完で十分だと思っていたんだけど、使ってみるとインテリジェンス補完便利すぎ!autoload/ファイルタイプcomplete.vim ってファイル作れば自分でも作れるんでだれかautoload/rubycomplete.vim希望まくり!

あと先日の謎自動補完はcompleteoptって新しく加わった機能だったみたい。オフにしたければ:set completeopt= でメニュでの補完リストは表示されなくなる。せっかくだから常用してみようと配色変更。

hi Pmenu ctermbg=8
hi PmenuSel ctermbg=12
hi PmenuSbar ctermbg=0

と設定してそこそこ見れる補完リストになった。

RailsのFastCGI運営時でのrestert,reloadの方法

RailsFastCGIで動かしてるアプリケーションのconfig(enviroment.rb)やライブラリの再読込って最初やり方が解らずに、lighttpdを毎回毎回毎回再起動というアホらしいことをしていたんだけど、先日RailsFCGIHandlerのソースを見たら特定のSIGNALを送ればいいことが解った。ソースには

  SIGNALS = {
    'HUP'  => :reload,
    'TERM' => :exit,
    'USR1' => :exit,
    'USR2' => :restart
  }

と定義されてるている。reloadとrestartの一番の違いはreloadだとライブラリなどの再読込はされるけど、enviroment.rbは再読込されず、restartは両方再読込されることだろう。で、コレを知ってからはアプリケーションがwikiならばwikiがpathに含まれているので

$ for i in `ps axo 'pid command'|grep dispatch.fcgi|grep wiki|awk '{print $1}'`;do kill -USR2 $i;done

みたいにコマンドを実行してSIGNALを実行してた。でも最近のRailsに付属の./script/process/reaper を使うと

$ ./script/process/reaper -a {restart|reload|graceful|kill}

で一発でできて便利!だけどこいつに罠があって、今のところsymlink先をFastCGIで動かしていると、File.expand_pathでdispatch.fcgiのフルパスを取得するためうまく動かないと云う、、、。でもたぶんそのうち誰かがパッチ投げてくれるから待てば直るはずだyp!

もちろんRails 0.13.1には./script/process/reaperは入ってないけどもうすぐ1.0が出るだろうつーことで。