Vim から zsh を呼ぶ プラギン 紹介
Advent Carender ぶっちぎってしまいましたねすいません(´・ω:;.:...
この記事はVim Advent Calendar 2012 : ATND 80日目の記事になります。
79日目は @rbtnnさんの「Vimの正規表現`\%`は結構便利だよ」という話
ProVimmerの方々はVimShellをお使いのことと思いますが
既存のshellと同様に使うには最初に幾分かの設定が必要だったりします。
shellスクリプトも異なっているようですし。
自分も一時期使っていましたが、なかなか慣れずに
Console Vim派でもあるので<C-Z>か:shell、普通に一旦閉じるに戻ってしまいました。
しかし、先日
なかなか良さげなプラギンを見つけたので紹介します。
Conqueというターミナルのインターフェースのような感じのものです。
shell以外にもターミナル上のもの(例えばemacsなど呼び出せます)
zshもzshrc, zshenvの設定のままで使えます。
とりあえず設定を以下に
NeoBundleLazyは別にNeobundleでも構わないですが、起動高速化のためにLazyにしてあります。
で、ターミナル上で動作するプログラムをVim上で操作出来るようになります。
※ただし、インサートモードのみ
さて、このプラギンの欠点は、例えば、zshを起動し、そのバッファを閉じた場合
zshプロセスが残ってしまうということです。
そこでもう一度、zshを起動すると別プロセスで立ち上がります。
Vimを終了するまでは消えないようです。
iTerm2などから確認出来ます。
まあ、終了すればいいのですが、やっぱりVimに引きこもりたいです。
そこで、対策としてでしょうかConque自体がいくつかのAPIを提供していますので
上記のように、autocmdを使って、zshバッファのとき、バッファ名からConqueの生成したプロセスを終了できます。
これで、プロセスが何重にもなることを防げます。
こうして、どんどんVimに魔改造が施されていくわけですね
2013/02/20追記
https://twitter.com/tyru/status/304203604795994112
tryuさんより以上のご指摘を受けました。
ここを参照
うーん、でも動いてる感じが…
修正できたらまた追記します
この記事はVim Advent Calendar 2012 : ATND 80日目の記事になります。
79日目は @rbtnnさんの「Vimの正規表現`\%`は結構便利だよ」という話
ProVimmerの方々はVimShellをお使いのことと思いますが
既存のshellと同様に使うには最初に幾分かの設定が必要だったりします。
shellスクリプトも異なっているようですし。
自分も一時期使っていましたが、なかなか慣れずに
Console Vim派でもあるので<C-Z>か:shell、普通に一旦閉じるに戻ってしまいました。
しかし、先日
なかなか良さげなプラギンを見つけたので紹介します。
Conqueというターミナルのインターフェースのような感じのものです。
shell以外にもターミナル上のもの(例えばemacsなど呼び出せます)
zshもzshrc, zshenvの設定のままで使えます。
((((;゚Д゚)))) |
とりあえず設定を以下に
NeoBundleLazy 'http://conque.googlecode.com/svn/trunk/', { 'autoload' : { 'commands' : ['ConqueTerm', 'ConqueTermSplit', 'ConqueTermTab', 'ConqueTermVSplit'] } } " Conque let g:ConqueTerm_ReadUnfocused = 1 let g:ConqueTerm_CloseOnEnd = 1 let g:ConqueTerm_StartMessages = 0 let g:ConqueTerm_CWInsert = 1 noremap <silent> <Leader>sh :ConqueTermVSplit zsh<CR> " Conque function! s:delete_ConqueTerm(buffer_name) let term_obj = conque_term#get_instance(a:buffer_name) call term_obj.close() endfunction autocmd BufWinLeave zsh\s-\s? call <SID>delete_ConqueTerm(expand('%'))
NeoBundleLazyは別にNeobundleでも構わないですが、起動高速化のためにLazyにしてあります。
:ConqueTermVSplit hogehoge
で、ターミナル上で動作するプログラムをVim上で操作出来るようになります。
※ただし、インサートモードのみ
さて、このプラギンの欠点は、例えば、zshを起動し、そのバッファを閉じた場合
zshプロセスが残ってしまうということです。
そこでもう一度、zshを起動すると別プロセスで立ち上がります。
Vimを終了するまでは消えないようです。
iTerm2などから確認出来ます。
まあ、終了すればいいのですが、やっぱりVimに引きこもりたいです。
そこで、対策としてでしょうかConque自体がいくつかのAPIを提供していますので
上記のように、autocmdを使って、zshバッファのとき、バッファ名からConqueの生成したプロセスを終了できます。
これで、プロセスが何重にもなることを防げます。
こうして、どんどんVimに魔改造が施されていくわけですね
2013/02/20追記
https://twitter.com/tyru/status/304203604795994112
tryuさんより以上のご指摘を受けました。
ここを参照
うーん、でも動いてる感じが…
修正できたらまた追記します
コメント
コメントを投稿