vimshellでVimでの開発をシームレスに行う その1

vimshellとはVimプラグインのひとつであり、Vim上でその名の通りshellを使えるようにするプラグインである。
作者はneocomplcacheでも有名なVimmerShougoさんであり、その他にもとても優秀なプラグインを開発されております。
今回はvimshellを使うことにより、何が素晴しいのかを焦点にあてて説明したいと思います。

vimshellを使用するために

当然プラグインをインストールする必要があります。
ここでは細かい説明は省くとするのでインストールは各自で調べてみてください。

vimshell

また、vimshellの動作にはvimprocが必須です。こちらも合わせて導入してください。

vimproc

vimshellと連携するプラグイン

vimshellはそれ単体でも非常に有用ですが、今回はそれだけではなくneocomplcacheとunite.vimもインストールしているという前提で進めます。

neocomplcache

unite.vim

vimshellで使用するコマンドをインストールしておく

当然vimshellは通常のshellと同じように使う事が出来るので使用するためにはあらかじめコマンドたちをインストールしておきます。
私がWindowsなので今回はMinGWを使用しています。当然CygwinだろうとSystem32のコマンドを使用する事も出来ます。
前提としてコマンドを使用する場合はコマンドへのパスが通っている必要があります。

:echo $PATH

と、入力してVim環境変数$PATHに実行したいコマンドへのパスを確認しておきます。
問題なければ準備は完了です。

vimshellを起動する

とりあえずvimshellを起動してみましょう。

:VimShell


と、入力すれば上記のような画面になると思います。
ここでとりあえず"cd"コマンドを使ってディレクトリを移動します。


もしここでneocomplcacheがインストールされていれば上記のように次々とディレクトリが補完されたと思います。
これはとても便利な機能です。
と入力すれば補完されたディレクトリを移動し、"/"と入力すればそのディレクトリに入る事が出来ます。
こういう機能を持つshellはほとんどないはずです。私は使った事がないのでわかりませんが、あるとすればzshくらいでしょうか。
これだけでもvimshell+neocomplcacheが強力だという事がわかってくると思います。

vimshellとunite.vimでヒストリ補完

vimshellにはunite.vimがインストールされていれば可能となるヒストリ補完機能があります。
おもむろにvimshellのプロンプト内でと入力してみましょう。


これまで入力してきたコマンドのヒストリが表示されたと思います。
これはunite.vimの機能でvimshellのhistoryをsourceとして使用し、一覧としています。
unite.vimに関して今回の本題ではないのでここではsourceに関して説明はしません。
このヒストリを使用して補完し、よりスムーズなコマンド入力が可能となります。
ヒストリ内の移動は今までと同じようにで行います。
いつも同じようなコマンドを打ちまくるアナタにオススメです。

vimshellの設定とマッピング

非常に便利に使う事が出来るvimshellですが、とりあえず_vimrc(.vimrc)あたりにでも便利なマッピングを書いておきましょう。
よりスムーズにvimshellを呼びだす事が出来るようになりシームレスな開発が可能になります。

" vimshell setting
let g:vimshell_interactive_update_time = 10
let g:vimshell_prompt = $USERNAME."% "

" vimshell map
nnoremap <silent> vs :VimShell<CR>
nnoremap <silent> vsc :VimShellCreate<CR>
nnoremap <silent> vp :VimShellPop<CR>

上記ふたつの設定は好みですが、"g:vimshell_prompt"の設定はWindows用なので注意してください。
マッピングは単にvimshellを呼び出しやすいようにするだけのものです。
キーは各自使い易くて他のマッピングの邪魔にならないようにするように。
とりあえず":VimShellPop"は手軽に呼び出しが出来てすぐ閉じたり出来るので設定していると便利です。

まだまだ便利なvimshell

ここまでだけでもかなり便利という事がわかったと思います。
特に補完を利用したneocomplcacheとunite.vimとの相性が抜群でこれだけでも他のshellを圧倒しています。
しかしこれで終わらないのがvimshellです。
次回は更にプログラムの実行とデバッキングを行ないたいと思います。

vimshellでVimでの開発をシームレスに行う その2

前回の内容より続きです。

vimshellで実際にプログラムを実行する

vimshellの基本機能を理解したところで、実際にコードを書いて実行してみましょう。
今回使用するコードは特に意味はないC言語のコードです。内容には一切の突っ込み禁止です。
とりあえず以下のようなテストコードを用意しました。

#include <stdio.h>

int main ()
{
  int i = 0;

  i = 3;

  if (i == 3) {
    i = 4;
  }

  i *= 2;

  for (i = 0; i < 5; ++i) {
    printf("i = %d \n", i);
  }
}


なんの変哲もないただのC言語プログラムです。
別に必要ないけどMakefileを書いておいてgccでmakeしましょう。
おもむろにvimshellを呼び出し、makeと入力してビルドを確認します。


MinGWgccを使ってビルド出来ました。
ちょっと余計な情報がくっついていますが、気にしないで。

プログラムを実行する

実行するのには様々な手段があります。
まずは一番ノーマルな方法で。



これでvimshell上に実行されたプログラムが出力出来ます。
これは一番ノーマルな方法ですが、プログラムの実行方法は他にも色々とあります。

iexeを使ってgdbデバッグ

"iexe"はプログラムを対話コマンドに特化し実行します。

% iexe gdb test.exe

インタプリタを起動しプログラムの入出力を行う事が出来ます。
上のように実行すると、なんとVim上でgdbが動きます!!



これでVim上でプログラムの実行とデバッグまで出来るようになりました。
基本的な開発ならこれで十分なはずです。
もちろん、iexeはこれ以外にもスクリプトを実行するインタプリタの端末用途として使用出来ますし、これだけに留まりません。
使い方はユーザー次第でいくらでも広がります。
全てはVim上で完結し、Vimのフル機能を使用する事が出来るという最大のメリットがあります。

その他にも様々な実行方法

vimshellは"iexe"以外にもGUIを実行するのに特化した"gexe"というものがあります。
これはゲームプログラムなど、GUIを必要とするものに対して使用出来ます。

更にvimshellには端末コマンドに特化した"texe"もあります。
まだまだ不完全ではありますが、iexeなどでは実行出来ないような特殊なものを実行する事が出来ます。
動作も不安定でCygwinの導入が必須だったりと敷居は高いですが、よりvimshellの可能性をみたいという人にオススメ。
"texe"と同種のプラグインとしてConque Shellというものがあったりしますが、こちらもまだまだ発展途上といった感じ。
しかし可能性は無限大。ぜひ活用してみましょう。

vimshellで快適なVimライフを

と、ここまで様々に取り上げてきましたがこれでもvimshellの機能としてはほんの一部です。
まだまだvimshellには可能性があり、他のプラグインと連携した際にはこれ以上ない快適な開発環境になると思います。
私は仕事でもvimshellを活用し、VisualStudioといったIDEを必要としない生活を送っています。
もちろんIDEにも素晴しいところがあり、それらを否定する気はありませんがVimには他のIDEには絶対にないものがあります。
neocomplcacheやunite.vimだけではなく、Vim自身のもつ機能と合わせていけば仕事や開発を更にシームレスに行える事でしょう。