firisu the shooter

プログラミング、Web開発について

VimShell の問題点とその対策

VimShell を導入してみた

前々から気になっていた VimShell を導入してみた。

Vim Script で一から実装されたシェルということでかなり癖が強く、 既存のシェルで出来たことが出来なくなるケースが多い。

ただし色々と粘ってみると案外解決可能な物もあったりするので、 ここに記録しておく。

ページャが使えない

Vim Shell では less や more を使ったインタラクティブなページャが使用できない。 よって $PAGER が cat に書き換えられる仕様になっている。

これではあまりにも不便なので、 Vim Shell 自体が内部コマンドとして less を持っている。 ページャが必要な時は、手動で less を実行すれば良い。

# 実行例
$ less git log
$ git log | less

ただし別ウィンドウを開いてそちらで表示するので、使用感は通常とは異なる。

エディタが使えない

エディタとは $EDITOR のことである。 よって git rebase -i とか git config -e を実行できない。

ぶっちゃけこれには解決策がないので、諦めるしかない。

幸いなことに私が $EDITOR を必要とするのは git だけなので、 Vim のプラグインを用いて git を操作することにした。

一応代替策として g:vimshell_editor_command というのが用意されているのだが、

  • GVIM のみ対応
  • +clientserver が必要
  • 運用方法が面倒

ということもあって代替策として機能していない。

glob にマッチしない時、ワイルドカードを含む文字列が消える

2013/03/11(月) 修正

Issues で報告したところ、 bash の挙動に合わせて修正して頂けました。

シェルスクリプトが実行できない

まぁ外部シェルに依存しない独自シェルなので当たり前だが。

一応 Vim Shell も頑張って環境変数だけは読みこんでくれる。 しかし関数定義までは対応していないので、人によっては非常に不便になるだろう。

私の場合 rbenv が使えなくなって非常に困ったほか、 独自の関数定義を Vim Shell 用に書き直す手間が発生した。

ちなみに、この手の設定は .vimshrc に書けば良い。 rbenv については、 .rbenv/shims, .rbenv/bin を $PATH に追加すれば使えるようになる。

多段プロンプトでしか動的なプロンプトを作れない

例えば bash であればプロンプトにカレントディレクトリを常時表示できるが、 Vim Shell ではそれが出来ない。

多段のプロンプトにすれば表示できるが、一々幅を取るので非常にストレスを感じる。

どうもセキュリティ上の理由からこのような制限になっているらしいが、 いまいちよく理解できない。

不便なので最悪自分でパッチを書いてしまおうかと思っている。

結論

Vim Shell の作者である Shougo 氏が各所で強調している通り、 Vim Shell は「Vim との親和性を第一に考えたシェル」なので、 *nix 系のシェルにどっぷり浸かっている人には使いづらくてしょうがないと思う。

逆に Windows 環境で Vim を使う人や、そこまで *nix のシェルに依存していない人は、 ちょっと工夫すれば実用的なレベルで使えるだろう。

私は今のところ $EDITOR が使えないこと以外は何とかなりそうなので、このまま使用し続けるつもりだ。

Comments