Home > Vim Hacks > Hack #142: Vimでシェルを起動する

Hack #142: Vimでシェルを起動する

VimがEmacsと比較して劣っているのは、コマンドの非同期実行だけではなく、シェルとの連携も挙げられます。ここでは現状のシェル呼び出しの問題点とEmacsとの比較、その解決方法について議論を行います。

:shellの欠点

Vimに搭載されている:shellコマンドは、一時的にシェルを実行できます。しかし当然使用するシェルの設定に左右される上、実行している間はVimが止まってしまいます。 この状態ではコマンドの出力もバッファにとれないですし、VimScriptとの連携もできません。 さらにLinux上のGVimではエスケープシーケンスを解釈しない上、WindowsのGVimでは邪魔なDOS窓が一瞬開くという問題もあります。 根本的な問題として、WindowsのシェルであるCMD.exeは貧弱なので、使う気になれません。 かといって、Windowsの場合は代わりとなるシェルも選択肢が少ないです。

screenの欠点

:shellの代わりに、GNU screenやそれをforkしたtscreen、GNU screenの後継であるtmuxを用いるという解決策もあります。 しかしこれらのソフトウェアは端末を要求するため、当然Windows環境やGVimでは動作しません。 さらにscreen上で起動しているプログラムではVimのキーバインドを使えない、Vimとのデータのやりとりが大変、などの問題点があります。

Vim-Shellパッチについて

Vim-Shellパッチとは、Vimに外部プロセスを実行させる機能を付け加える巨大パッチです。 エスケープシーケンスもきちんと解釈するので、優れたシェル環境なのですが、 パッチは本家に取り込まれることがなく、しかもVim 7.2には対応していません。 Windows上では使えず、GVimでも使えないなど、欠点も多いです。

そのほかのプラグインについて

そのほかにもシェルを模倣するプラグインはありますが、どれも提供される機能に難があったり、 Windows環境やGVimでは使えないものばかりです。

Emacsとの比較

対するEmacsはどうでしょう。Emacsでは、標準的に搭載されているshell-modeを用いてシェルを実行できます。 起動が遅いですが、さらに高機能なeshell-modeを用いて100% Emacs Lispなシェルを使うこともできます。 eshell-modeは端末機能としては不完全なので、端末がほしいだけなら、ansi-termを用いると良いでしょう。 この優れたシェル環境を得るためだけにEmacsへと移行した人々も多いのではないかと思います。 最近では、ansi-termを改良したmulti-termというものが人気らしいです。

vimshellについて

Emacsへの対抗馬になりうるのが、私が開発しているvimshellです。 完全な端末機能を目指すのではなく、純粋な対話シェルとしてeshellを目標にしています。 自動補完プラグインであるneocomplcacheと連携させることで、自動補完のできるシェル環境になります。 vimprocと連携させれば非同期実行も可能、対話プログラムを起動できる、と開発途中の現在でもかなりの機能を誇ります。 vimshellはzshの機能を一部取り込んでいて、コマンドラインスタックや優れた履歴検索機能もあります。

Conqueとの比較

その他のライブラリとして、vimprocやvimshellをもとにNico Raffatoさんが製作しているConqueというプラグインがあります。まだVer.1.0がリリースされたばかりですが、現在も精力的に開発されています。 これは内部でPythonインタフェースを用いて外部プロセスとの通信を行っているので、安定性に難があるのと、Pythonインタフェースが必須になっています。 Emacsのansi-termを目標にしているようで、端末としてはかなりの完成度を誇ります。 ただし日本語が使えなかったり、Windows環境で動作しないという問題があります。 キー入力をすべて奪いとってしまうので、他のプラグインとの連携もしづらいです。 Emacsも内部で動かせるなど、ネタとしてはかなり面白いのですが……。

Shougo
このエントリーをはてなブックマークに追加
はてなブックマーク - Hack #142: Vimでシェルを起動する
Share on Facebook
Post to Google Buzz
Bookmark this on Google Bookmarks
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed

Comments:0

Comment Form
Remember personal info

Trackbacks:2

Trackback URL for this entry
http://vim-users.jp/2010/04/hack142/trackback/
Listed below are links to weblogs that reference
Hack #142: Vimでシェルを起動する from Vim-users.jp
trackback from Alone Like a Rhinoceros Horn 10-06-16 (水) 14:56

[vim]:shell vs vimshell @端末世界

vimfiler導入メモの続き。結論から言うと、 :shell でいいや。 ということになってしまいました。そういう結論に至った経緯について、 Vim-users.jp – Hack #142: Vimでシェルを起動する に書かれ…

trackback from Alone Like a Rhinoceros Horn 10-06-16 (水) 20:02

[vim]シェルを求めて三千里〜悠久のvim編〜

タイトルに深い意味はありません。 さて、vim強化月間ということで、vim による開発作業の能率を上げるべく、色んなプラグインに手を出してあれこれ試しています。中でも、「vim とシ…

Home > Vim Hacks > Hack #142: Vimでシェルを起動する

Search
Feeds
Links
  • 公式
  • 勉強会
  • 情報
  • コミュニティ
  • Meta
    Etc
    Creative Commons License
    This blog is licensed under a Creative Commons License.

    Return to page top