2010年6月15日火曜日

Re: :shell vs vimshell

前回より、だいぶブログの更新があいてしまいました。なかなか続けるというのは難しいですね。まぁ、それはいいとして本題です。

h1mesukeさんのvimshellの感想として、「:shell vs vimshell」
http://d.hatena.ne.jp/h1mesuke/20100615/p1というページが公開されていました。本来ならばコメントとしてそちらのページに書き込む予定でしたが、長くなりそうなので、ブログでコメントを述べておきたいと思います。


この辺りのことは、Linux上でかつ端末内でのみ vim を使う自分にはそもそも問題になりません。:shell で起ち上がるのは zsh であり、強力です。*1

vimshellはもともと、Windowsの貧弱なコマンドライン環境を何とかするために開発されました。その後、プラグインとの連携性や、インタプリタ実行などの機能が付加され、現在のような姿になります。Linux上で、しかも端末上で使用するなら、それらの利点はあまりないかもしれません。


>実行している間はVimが止まってしまいます。

あまり格好良くはありませんが、別タブで(;^ω^)

>コマンドの出力もバッファにとれない

あまり格好良くはありませんが、xsel とかマウスによるコピペで。

それで満足できるなら、vimshellを使う意味はあまりないでしょう。vimshellはVimから出たくない、Vim上ですべてのコマンド実行を解決させたい人のためのものですから。


vimshell を使ってみてまず出鼻を挫かれるのは、.zshrc で定義している alias やシェル関数が効かないこと。l みたいなものから始まって、その数はかなりの量にのぼるので、それらを vimshell 上でも使えるようにするには、と考えるとちょっと気が遠くなりました。

はい。シェルの移行コストというのは高くて、それが新しいシェルがなかなか生まれない原因ではないかと私は考えています。なぜvimshellはzshの構文が使えないのかというと、vimshellはzshやbash, shとの互換性よりも、Vim Scriptとの親和性を考えて設計しているためです。加えて、私自身がシェルスクリプトの難解な構文や落とし穴が好きでない、というせいもあります。ただ、パイプはいずれ使えるようにします。zshの高度なリダイレクションもいずれは実装します。


使えるようにできたところで、2つのシェルの設定を抱えることになり、管理が二重化することは明白で、これは許容できないところです。

確かに設定の二重化は避けられないです。ただ、「これを許容できない」とありますが、本当にそうでしょうか。例えば、zshやbash(readline)でviキーバインドを愛用している人がいますが、これはzshとVimの設定の二重化です。あまりにVimに慣れすぎると、外の世界でもVimの設定を使いたくなります。「zshにVimのビジュアルモードを実装した」人がいますが、これこそ典型例だと思います。zsh上でVimの設定を模倣するくらいなら、Vim上でzshの設定を模倣してもいいと思いますが、どうでしょうか。


物事を単純にしたいのならシェルは一元化すべきで、:shell から普段使っているシェルを呼び出すのがラク。DRY原則重要。

一元化することは大事だと思います。私は一元化したことによって、zshの代わりにvimshellが標準シェルとなってしまいましたが。「Vimの設定 >>越えられない壁 zshの設定 >> screenの設定」なので、すべてがVimに吸収されてしまうのも容易に想像にできます。


とすると、自分はそもそも vimshell の恩恵を受けにくいところにいる、ということかも知れません。というか、多分そう。もしくは vimmerレベルが低いか(;^ω^)

まぁ、その方が幸せなのかもしれません。vimshellをありがたがるということは、もうVim病にかかっているということですから……。

指摘のあったとおり、vimshellはまだ完全ではありません。いつかはほぼzshを置き換えられるようにと考えて開発をしていますが、道はかなり険しいです。もし機会がありましたらまたvimshellを試してもらえるとありがたいです。きっとその頃には欠点も解消しているでしょう。

追記:「mattnさんのコメント」

mattn 個人的にはtailが動かないとエディタ内のシェルってそれほど意味を成さないと思ってる。

そんなあなたも大丈夫。bg tail -f もしくはiexe tail -fが使えます。

6 件のコメント:

  1. h1mesuke です。コメントありがとうございました。

    シェルやエディタのような懐の深いツールの使い方というのは、自分自身の成長にともなって大きく変化するところなので、vimshell に手を出す機会はまた来ると予感しています。

    Emacs、vim、zsh いずれも自分には二三度の挫折経験があるのですが、必要に迫られて挑戦するうちにそのよさがわかって手に馴染む道具になったということがありますから。

    今の自分には「すべてを vim上で」というモチベーションがやや足りないようですが、それはそれ、まだまだ vimmer としての修行が足りないのかも知れません。

    >「これを許容できない」とありますが、本当にそうでしょうか。

    これは人によると思います。私はものぐさ太郎なので、シェルはシェル、エディタはエディタで使い慣れたひとつを使い込んでいきたいと思うのです。(まあ、そのせいで新しいものに乗り遅れたりしますが)

    端末内で生活していると vim が起動していようがいまいが zsh の上にいるわけなので、使い込むシェルとしての zsh の存在はかなり大きいです。

    返信削除
  2. これは、zsh内でVimを起動するか、Vim内でzshを起動するかの違いなのでしょう。
    Vimを使う人たちはEmacs使いとは違ってシェルからVimを使う人たちが多いような気がします。GVim使いは少ないですね。
    vimshellはどちらかというとEmacsに似たアプローチなのです。

    返信削除
  3. 試してみましたが
    http://img2.pict.com/42/c8/7d/3664066/0/1276598185.jpg
    http://img2.pict.com/ae/d7/ac/3664072/0/1276598275.jpg
    といったエラーが出て進めませんでした。
    tailプロセスの分割ウィンドウはファイルが更新されても更新される事はなかったです。要調査
    あと、Windowsユーザなので「C:\Documents and Settings」配下を補完したいのですが、まだ難ありという所でした。

    私もまた今度試します。:)

    返信削除
  4. このコメントは投稿者によって削除されました。

    返信削除
  5. > あと、Windowsユーザなので「C:\Documents and Settings」配下を補完したいのですが、まだ難ありという所でした。
    確かにそうですね。修正が必要です。

    返信削除
  6. エラーは修正しました。C:\Documents and Settingsにも対応。tail -fは"Bad file descripter"となってしまいますね。まぁ、Windows自体がこういう用途に対応していないので……。

    返信削除