tern.vimでvimでjavascriptの補完など(vim advent calendar2012, 155日目)
これはvim advent calendar2012の155日目の記事です。
ternについて
- javascriptで書かれたjavascriptの構文解析、型推論library https://github.com/marijnh/tern
- Marijn Haverbeke氏を中心に開発
- browser中にcode editorを提供するjavascript component codemirror の開発者でもある
- 既存editorでのjavascript開発の改善を目的としており現時点ではemacs, vim, sublimetext, bracketsでternを用いたjavascriptの補完が可能。
tern for vimについて
- Marijn氏のgithubにternのためのvim scriptのrepositoryがある。 https://github.com/marijnh/tern_for_vim
- ternのためのemacs lispはternのrepository中にある。
- sublimetext拡張もMarijn氏のgithubにrepositoryがある。 https://github.com/marijnh/tern_for_sublime/
- bracketsではsprint24からdefaultでternが組み込まれている(bracketsでは下記のような作業は不要)
ternのinstallと使用方法
install
下記の方法でとりあえずwarning無しでinstallできる。 ternはnodejsを用いるのでまずnodejsをinstallする必要がある。
npm install -g typescript
git clone git://github.com/marijnh/tern
cd tern
npm install
確認したのはMac, homebrewの環境でありternは/usr/local/bin/ternに installされていた。 homebrewはinstall時に/usr/local下のpermissionを変更するため上記で installできた、またtern commandにPATHが通っていたが他環境では異なる可能性がある
使用方法
command lineで tern と入力することでtern(server)がstartする
問題無くternがstartしていれば
Listening on port 58355
のように表示される。port番号はその都度変わる。 ある程度通信が無いと下記のようにternは終了する。
Was idle for 5 minutes. Shutting down.
ternをvimで使えるようにする
neobundleなり、pathogenなりで前述のternのためのvim scriptをinstallする。 vimはpython supportが有効になっている必要がある。 あとは適当なjs fileを作成後 C-x, C-o と入力することで下記のように補 完が行われる。 bracketsとは異なり、補完だけでなくsyntaxとparameterの情報もpreviewに表 示される。
- emacsでのtern supportもほぼvimと同様の模様
- sublimetextは未確認
- bracketsでは上述のようなternのinstall作業, serverのstartを行う必要は無く、補完が可能だが付加情報をeditor内に表示する機能はまだ備えていないようだった
このような補完の他
- cursor下の何かの定義へのjump(:TernDef)
- cursor下の何かの(MDN)document表示(:TernDoc)
- cursor下の何かの型情報表示(:TernType)
- cursor下のvariableもしくpropertyの参照個所の表示(:TernRefs)
- refactoring(rename)(:TernRename)
といった機能がある。
おわりに
この記事のほとんどは id:kiwanami さんの関西Emacsでの発表のぱくりです http://kiwanami.net/temp/2013-0427-kansai-emacs.html
tern便利