Vimshell で erl コマンドを実行する
Erlang 基礎勉強会で、Emacs 使いの方々が少し羨ましかったので、真似して MacVim 上で Vimshell から erl コマンドを実行してみました。
ちなみに、今回使用したのは MacVim-KaoriYa の 20090802 版です。
Vimshell の準備
MacVim-KaoriYa 20090802 版は、テストリリース版と異なり vimproc.vim が同梱されていないので、下記から vimproc.vim を取得します。
Shougo's vimproc at master - GitHub
取得した vimproc.vim は、/Applications/MacVim.app/Contents/Resources/vim/runtime/autoload/ 配下に設置します。*1
OSX 10.4 を利用している場合、/usr/lib 配下に libutil.dylib が存在しないため、MacVim 起動時に proc.so のロードに失敗します。*2
libutil.dylib が提供する関数は、libSystem.dylib が提供してくれるので、下記のようにシンボリックリンクを作成するなどで回避します。
ln -s /usr/lib/libSystem.dylib /usr/lib/libutil.dylib
ここまで準備できた所で、下記から Vimshell を取得します。
Shougo's vimshell at master - GitHub
取得したファイルは、~/.vim 配下などに設置します。
最後に、Vimshell の非同期実行を有効とするため、.vimrc などに let g:VimShell_EnableInteractive=1 という行を追加します。
MacVim のみで使用する場合は、.gvimrc を下記のように設定します。
" ..snip.. if has('gui_macvim') " ..snip.. let g:VimShell_EnableInteractive=1 elseif has('mac') " ..snip.. else " ..snip.. endif " ..snip..
erl コマンドを実行する
MacVim を起動し、:VimShell で Vimshell を起動します。
インタラクティブシェル*3の実行は、iexe で行います。
erl コマンドの実行を行う場合は、下記の通りです。
vimshell% iexe erl -sname foo
MacPort から erl をインストールしている場合、/opt/local/bin 配下に erl コマンドは存在しますが、MacVim.app を直接実行すると /opt/local/bin には PATH が通っていないため、erl コマンドの実行に失敗します。
その場合、/Developer/Applications/Utilities 配下にある Property List Editor を使用し、下記のような ~/.MacOSX/environment.plist を作るなどで回避できます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PATH</key> <string>/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/cooldaemon/bin</string> </dict> </plist>
environment.plist を書き換えた場合、設定を反映させるには、ログインしなおす必要があります。
Vimshell の設定
tabstop を 8 以外に設定していると ls の出力が崩れるので /path/to/.vim/after/ftplugin/vimshell.vim に「setlocal tabstop=8」を加えます。
また、Erlang Shell で neocomplcache に頼った辞書補完とバッファ補完を行なうために、下記を .vimrc に追加します。
let g:NeoComplCache_DictionaryFileTypeLists = { \ 'int_erl' : $HOME . '/.vim/dict/erlang.dict' \} let g:NeoComplCache_SameFileTypeLists = { \ 'int_erl' : 'erlang,man' \}
ちなみに、perlsh や irb も同様の事が可能です。