2010/04/26ツイートVimがEmacsと比較して劣っているのは、コマンドの非同期実行だけではなく、シェルとの連携も挙げられます。ここでは現状のシェル呼び出しの問題点とEmacsとの比較、その解決方法について議論を行います。:shellの欠点Vimに搭載されている:shellコマンドは、一時的にシェルを実行できます。使用するシェルの設定に左右される上、実行している間はVimが止まってしまいます。この状態ではコマンドの出力もバッファにとれないですし、VimScriptとの連携もできません。Linux上のGVimではエスケープシーケンスを解釈しない上、WindowsのGVimでは邪魔なDOS窓が一瞬開くという問題もあります。根本的な問題として、WindowsのシェルであるCMD.exeは貧弱なので、使う気になれません。いって、Windowsの場合は代わりとなるシェルも選択肢が少ないです。screenの後継であるtmuxを用いるという解決策もあります。これらのソフトウェアは端末を要求するため、当然Windows環境やGVimでは動作しません。screen上で起動しているプログラムではVimのキーバインドを使えない、Vimとのデータのやりとりが大変、などの問題点があります。Vim-ShellパッチについてVim-Shellパッチとは、Vimに外部プロセスを実行させる機能を付け加える巨大パッチです。7.2には対応していません。Windows上では使えず、GVimでも使えないなど、欠点も多いです。Windows環境やGVimでは使えないものばかりです。対するEmacsはどうでしょう。Emacsでは、標準的に搭載されているshell-modeを用いてシェルを実行できます。Lispなシェルを使うこともできます。eshell-modeは端末機能としては不完全なので、端末がほしいだけなら、ansi-termを用いると良いでしょう。この優れたシェル環境を得るためだけにEmacsへと移行した人々も多いのではないかと思います。最近では、ansi-termを改良したmulti-termというものが人気らしいです。vimshellについてEmacsへの対抗馬になりうるのが、私が開発しているvimshellです。完全な端末機能を目指すのではなく、純粋な対話シェルとしてeshellを目標にしています。自動補完プラグインであるneocomplcacheと連携させることで、自動補完のできるシェル環境になります。vimprocと連携させれば非同期実行も可能、対話プログラムを起動できる、と開発途中の現在でもかなりの機能を誇ります。vimshellはzshの機能を一部取り込んでいて、コマンドラインスタックや優れた履歴検索機能もあります。Raffatoさんが製作しているConqueというプラグインがあります。Ver.1.0がリリースされたばかりですが、現在も精力的に開発されています。これは内部でPythonインタフェースを用いて外部プロセスとの通信を行っているので、安定性に難があるのと、Pythonインタフェースが必須になっています。Emacsのansi-termを目標にしているようで、端末としてはかなりの完成度を誇ります。日本語が使えなかったり、Windows環境で動作しないという問題があります。キー入力をすべて奪いとってしまうので、他のプラグインとの連携もしづらいです。Emacsも内部で動かせるなど、ネタとしてはかなり面白いのですが......。