ホーム > タグ > vimproc
vimproc
Vimテクニックバイブル紹介(Shougo版)
- 2011-08-15 (月)
- Vim script | 告知
この記事について
この記事は、開発環境勉強会における「Vimテクニックバイブル」紹介スライドの完全版です。 「Vimテクニックバイブル」については、taku_oさんやmattnさんなども記事を書いていますが、 私の場合はできるだけ本の内容に触れたものにしています。 これを読んでVimテクニックバイブルを購入していただける人が増えれば、著者達にとって最高の喜びです。
Vimテクニックバイブルができた背景
以前にもブログの記事で触れていますが、Vim界には良質な記事や書籍が不足しています。 特に、まともにVim scriptを書ける人が書いた書籍がほとんどありません。 これはVim界の大きな損失であり、Vim scriptプログラマーが育たない大きな原因となっています。 私がVim勉強会に参加すると、必ずといっていいほど聞かれるのが 「Shougoさんは、Vimの書籍を書かないんですか?」ということです。 この声になかなか答えられないのは悲しいものがありました。
と、いうことで……今年ついにVimの書籍が刊行されます! 書名は「Vimテクニックバイブル」です。 中身は「Emacsテクニックバイブル」のVim版となっており、イメージカラーは当然Vimグリーンです。 そういえば、EmacsテクニックバイブルはEmacsブルー(パープル)でしたね。 キャッチコピーは、「unite.vimで進化する新しいVimの常識を教えます。あなたはVimの本当の姿を知っていますか?」 Emacsテクニックバイブルとは違い、unite.vimを全面に押し出しています。
執筆者紹介
執筆陣はかなり豪華です。おそらく、これだけの人達が一冊の書籍を作るために集まることはもうないでしょう。
taku_o
人気サイト「名無しのVim使い」の管理人です。雑誌にVimの記事を執筆したことがあります。 サイトで紹介しているだけあって、様々なプラグインについて、かなりの知見を持っています。
yukimi
章の基礎知識や用語の統一など、細かいところで手伝ってもらっています。Vim使いです。
mattn
webapi-vimやzencoding.vimの作者です。他にも細かなプラグインを作っています。 KaoriYaさんと同じく、昔からVimにパッチを多数送っており、Vimの内部実装や黒魔術に詳しいです。
thinca
quickrunやref.vim, scouter.vimなどの作者です。unite.vimのsourceやvital.vim, eskk.vimなどにも関わっています。 Vim scriptにかなり詳しいです。
fuenor
QFixHowm, QFixGrep, JPFormat.vimの作者で、Vim-UTF8を配布しています。 Windows環境での日本語の扱いについて詳しいです。
Shougo
neocomplcache, vimshell, vimproc, unite.vim, vimfilerなどを作っています。 メンテナンスしているプラグインが多すぎて、なかなか時間が足りないのが悩みです。Vimは環境だと思っています。
内容紹介
もう執筆がほぼ終わっているため、中身は確定しています。プラグインの紹介を中心とした豪華な内容となるようにしました。 紹介しているプラグインは定番からマイナーまで幅広く、作者自ら解説していることもあります。 まだ発売まで期間があるため、詳しい目次を挙げることはできませんが、以下のような内容が含まれています。
vimfiler
vimfilerの使い方や、キーマッピング、マニアックなところではvimfilerを用いた拡張リネーム機能について解説しています。
netrw
netrwによる遠隔地ファイル編集、netrwによるブックマーク、netrwによるファイル操作が解説されています。
quickrun
quickrunの使い方、各種オプション、設定方法について解説されています。
ref.vim
ref.vimの使い方、各種sourceについて解説されています。
vimshell(インタプリタ通信機能を含む)
vimshellの使い方、よく使われる内部コマンド、vimshellのインタプリタ通信機能を解説しています。 ちなみに、Emacsテクニックバイブルでは、eshellについて触れられていません。
Conque
Vimで端末を実現するプラグインであるConqueの使い方、vimshellとの違いについて解説しています。
skk.vim
SKKについて解説しています。eskk.vimも少しだけ書いてあります。それほどページはありません。
neocomplcache
neocomplcacheの使い方、設定方法、neocomplcacheのスニペット機能、スニペットの書き方、 neocomplcacheのsourceの作り方と、大変豪華な内容となっています。 以前Vim Hacksに書いた内容の完全版と言っても良いでしょう。
zencoding.vim
zencoding.vimの基本から、任意の言語への応用例まで挙げられています。
QFixHowm
QFixHowmの使い方、メモの作成方法、メモの検索、ToDo管理について解説されています。
QFixGrep
Windows環境のgrepの注意点についても解説されています。
JPFormat.vim
JPFormatによる日本語の整形方法について解説されています。
autodate.vim
webapi-vim
VimからWebサービスを扱う方法について解説されています。
project.vim
project.vimによるプロジェクト管理やproject.vimの設定方法について解説されています。
Vim scriptが分からない初心者でも安心!
Vimの設定や、Vim pluginについての解説を中心とした書籍となっていますが、 ある程度のVim scriptの知識は必要不可欠です。 そこで、次のような項目について解説しています。 これ以上の詳しい解説については、Vimのヘルプを参照してください。
:helpの読み方
Vimの:helpをすぐに引けるかどうかは、初心者と初級者を分ける大変重要なファクターとなっています。 この本では、Vimの:helpの使い方について解説しています。
Vim script基礎文法最速マスター(改訂版)
これは、thincaさんが以前ブログで書いていた「Vim script基礎文法最速マスター」の改訂版です。 Vim scriptについて一通り学ぶことができます。
マッピングについて
Vimのキーマッピングは大変ややこしいですが、詳しく解説しています。
オプションについて
Vimのオプションには落とし穴が多数あります。Vimのオプションにおける仕様について解説しています。
Vimプラグインの管理
Vimのプラグインをインストールするなら、パッケージマネージャは必要不可欠です。 定番のVundle, pathogenから、vimballに至るまで解説をしています。
テキストオブジェクト
最近のVimを語るにはなくてはならない機能です。 テキストオブジェクトの拡張についても触れられています。
QuickFix
grepやmakeには欠かせない機能です。
:autocmd
外部インタフェース
ちょっとレベルが高いですが、Perl, Pythonの外部インタフェースについて解説されています。
最近のVimといえば、unite.vimは外せないよね!
当然unite.vimについては、1つのChapterを贅沢に使用して解説しています。 Emacsテクニックバイブルはanything.elについて2つのChapterを使っているので、そちらよりは若干量が減ります。 それでも、30ページくらいはあるため、十分満足できると思います。 unite.vimの章では、次の内容を解説しています。 これを読めばあなたもunite.vimマスターに!
vimfiler, vimshellなどといった他のプラグインとの連携
unite.vimの有用なsource
カスタマイズ方法についての解説
unite.vimの各種オプションについて、解説しています。 マニアックなところでは、buffer-name-optionについての解説もあります。
source, kind, action, filterの解説
特にsourceを自作する場合、source, kind, action, filterの概念は重要です。それぞれの仕様について詳しく解説しています。 作者が自ら書いているため、情報が正確で安心です。
sourceの作り方まで載っている!
サンプルsourceの作り方が書いてあります。マニアックなところでは、非同期sourceの仕様についても書いています。
unite.vim Ver.2.2対応(一応)
一応最新版のunite.vimの仕様に準拠しています。残念ながら、あまりにも新しい機能は解説できていません。 不変的な情報に絞って解説しています。 現在開発中のunite.vim Ver.3.0について少しだけ触れています。
もちろん、Emacsの人達にもオススメ
EmacsテクニックバイブルがVimmerにも有用な本であったように、 当然VimテクニックバイブルはEmacsを使っている方々にもオススメです。 Emacsを使っている人も、異文化交流は重要です。 同じ環境で満足していたら、何も生まれません。 auto-complete.elもVimの補完機能を参考にしています。 つまり、Emacs使いであってもVimや他のエディタからも刺激を受けるべきなのです。 この本を読めば、最近のVimの機能やプラグインについて分かります。 例えば、unite.vimとanything.elの違いが分かります。 新人にVimを教えざるをえないときにも使えます。 さらに、一身上の理由により、Vimに乗り換えざるをえないときもVimテクニックバイブルの知識があれば安心ですね。
現在確定している情報
ページ数は384Pで、Emacsテクニックバイブルと同じです。 値段は¥2, 980+税です。基本的に技術書というのは、¥3000を越えると購入までのハードルが上がってしまいます。 ページをできるだけ減らしたこともあり、税抜きでなんとか¥3000は切ったのですが、若干Emacsテクニックバイブルより高くなってしまいました。 発売日は9月中旬予定ですが、詳しい日付けの確定はしていません。 目次については、八月中に確定する予定なので、九月には詳しい情報が出せるでしょう。 まだ発売まで時間があるので、しばらくお待ちください。
残念ながら載せられなかった内容
できるだけ、著名なプラグインは載せるように心がけましたが、 ページ数の都合やその他様々な理由により載せられなかったプラグインがあります。 ここではそれらについて紹介します。
VCSとの連携
VCSと連携できるプラグインとしては、git-vimやfugitive.vimがありますが、決定版と呼べるようなものがなかったためです。 vcs.vimが候補だったんですが、未完成でした。
shadow.vim
時間とページ数の都合が付きませんでした。
snipMate
neocomplcacheのスニペット機能で十分だったためです。解説する人もいませんでした。 ちなみに、snippetsEmuはページ数が足りませんでした。
echodoc
入れてもよかったんですが、他のTipsが削られすぎて入れる暇がありませんでした。
netrwについての詳しい解説
時間とページ数の都合がつきませんでした。 ただし、一部のTipsでnetrwの機能について触れられています。
metarw
使っている人があまりに少ないため削られました。metarwがやっていることは、vimfiler+unite.vimでできるようになる予定です。
vimprocの使い方について
書籍では簡単にvimprocについて触れていますが、さすがに詳しい解説はできませんでした。 想定読者にとっては難しすぎるからです。vimprocをバリバリ使えるような層では、Vim scriptから使い方を解読するのも簡単だと思います。
vital.vim
このプラグインは、プラグイン制作者のためのものです。この本の対象読者にはレベルが高すぎました。 それに、ページ数の余裕もありませんでした。
内容の陳腐化への懸念について
書籍は生物です。コンピュータに関する書籍は出たばかりのときに購入しておかないと、役に立つ前に時代遅れとなってしまうでしょう。 だからこの本が必要なら、発売されたらすぐに購入するのが適切です。特に、一度絶版になってしまったら取り返しがつきません。 本の売り上げが上がると、出版社に対するVimへの印象が良くなり、続編などが企画されるかもしれません:-)
特に私のプラグインは進化が早いため、本が出たらすぐに時代遅れとならないか心配してくれている人がいるようです。 はい。それは正しい指摘です。 ただ、私もそのことは分かっていました。だからわざと新しすぎる機能や、あまり使われない機能については本の中では解説せず、 「適時:helpを参照してください」ということになっています。できるだけ不変であろうことについて解説するようにしています。 それでも現在の実装と齟齬がでてきてしまった場合は、正誤表にて何かしらのフォローをする予定です。
「:helpに全部書いてあるから書籍は必要ない」という意見について
これはある意味事実です。だからこそ、本の対象とする読者は「Vimの基本的な操作や設定はできるが、:helpを自在に引くことはできない層」なのです。 :helpはリファレンスマニュアル的であり、分からない語句を検索するときに使います。 初心者が通読するには向いていません。 本というのは初心者が参照しやすいように、重要な情報をふるい分けることに価値があると考えています。
ただし、私が自分の記事の中で気をつけたのは、できるだけ「設計思想や使い方について解説をする」ことです。 これは:helpに書いていないことが多いうえに、内容が陳腐化することも少ないと考えました。 だから、ヘルプを自由自在に参照することができる、レベルが高いVim使いにとっても役立つ書籍だとは思います。 これが本当かどうかは、自分の目で本を見て確認してください。
なぜ「Vimテクニックバイブル」はVim scriptを学ぶ本ではないのか
それは需要がないからです。考えてみてください。あなたの周囲にVim scriptをバリバリ書けるような人はいますか? Vimが好きだから、Vim scriptを本格的に学びたいと考えている人はいますか? まずいないでしょう。「Vimテクニックバイブル」の内容ですら出版社からはリスクがあると考えられている現状において、 日本でVim scriptを学ぶための書籍が出る確率は0です。おそらく売れません。 「Vimテクニックバイブル」にはVim scriptの解説がある程度書いてあります。 しかし、一流のVim scripterになるための道はまだまだ険しいのです。
それでもVim script本の構想を諦めきれない場合は、まず「Vimテクニックバイブル」を購入し、その本に書いてあることを全てマスターしてください。 さらに「Vimテクニックバイブル」を周囲に宣伝し、全国のVimmerのVimレベルを上昇させてください。 その暁には、Vim script本の出版リスクは低減され、いつの日か発売されるかもしれません。
オマケ
今後、vim-users.jpで「Vimテクニックバイブル」に関する何かが掲載されるかもしれません。こうご期待! ちなみに、Vimテクニックバイブルを購入してもらった場合、勉強会でShougoのサインが貰えるかもしれませんよ!
Shougo- Comments: 0
- Trackbacks: 0
Hack #142: Vimでシェルを起動する
- 2010-04-26 (月)
- Vim Hacks
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- Comments: 0
- Trackbacks: 2
Hack #124: Vimで非同期実行を行う
- 2010-02-13 (土)
- Vim Hacks
VimがEmacsと比較して一番劣っている機能として、コマンドの非同期実行があげられます。ここでは現状のコマンド実行の問題点とEmacsとの比較、その解決方法について議論を行います。
Vimのコマンド実行の欠点
Vimはsystem()や:readを用いて外部コマンドを実行し、その結果を得ることができます。これは非常に便利なのですが、Vimが起動した外部コマンドの終了を待ち合わせるため、Vimが停止してしまうという欠点があります。これは特にquickrunや:makeを実行しているときに問題となります。プログラムをバックグラウンドで実行すれば、終了を待ち合わせずにすみますが、それでは結果がとれません。さらにWindows上のGVimの場合、外部コマンドを実行するたびにDOS窓が開いて煩わしいです。
処理内容がシェルに依存するという欠点もあります。たとえば、Windowsでプログラムを起動するためには適切にエスケープしなければいけません。
Emacsとの比較
対するEmacsはどうでしょう。Emacsでは、start-process関数を用いてプロセスを生成することにより、コマンドを非同期的に実行できます。
comint-modeでもこれを用いてインタプリタを起動し、非同期で通信しています。
ただし、Emacsにはマルチスレッド関数がありません。全ての処理はシングルスレッドです。
外部インタフェースの欠点
RubyやPerl, Pythonといった外部インタフェースを用いるという解決策もあります。 しかし、外部インタフェースは通常のVimScriptとは文法が異なるため、連携が非常にややこしいです。時折フリーズしたり、エラーが起こったときにデバッグしづらいという欠点もあります。さらに、すべての環境で使えるわけでもありません。インストールしているRubyやPerl, Pythonのバージョンにも依存するなど、 非同期に通信するためだけに外部インタフェースを用いるのは大げさすぎます。 ただし外部インタフェース内ではマルチスレッドが使えるので、真の非同期通信をするためには、外部インタフェースを用いるほかありません。
vimprocについて
外部ライブラリであるvimprocを用いて外部コマンドと通信すれば、上記に挙げたほとんどの欠点が解消されます。 vimprocとはYukihiro Nakadairaさんが開発している、優れた非同期実行ライブラリです。私が改良したものをgithub上で開発しています。 http://github.com/Shougo/vimproc/tree/master ソースからコンパイルしてVimのautoloadディレクトリに、「proc.soまたはproc.dll」と「vimproc.vim」をコピーすれば準備完了です。
ここでは、vimprocで実装されているvimproc#system関数を紹介します。これは、標準のsystem関数を置き換えることができます。
ただしシェルを起動しないので、シェルの内部コマンドは動作しません。パイプやリダイレクトも動かないので注意してください。
パイプやリダイレクトについては、今後実装予定です。
let l:result = vimproc#system('ls')
vimprocを駆使すれば非同期実行をエミュレーションできますが、スレッドの存在しないVimでは使い方がとてもややこしいので、ここでは説明を省略します。
興味がある場合にはvimprocのtestディレクトリにあるサンプルスクリプトを参照してください。
ネットワーク通信もできるので、Twit.vimみたいなプログラムも簡単に作成できます。
いずれはcomint-modeのように、インタプリタ実行機能を統合させたいと思っています。
ちなみにVimScriptでのシェル実装であるvimshellでも、vimprocを用いて非同期実行を行っています。
その他の非同期実行ライブラリ
その他のライブラリとして、vimprocやvimshellをもとにNico Raffatoさんが製作しているConqueというプラグインがあり、とても精力的に開発されています。Emacsのansi-term.elを目標にしているようで、動作が散漫なのが欠点ですが、多機能のようなので使用してみるといいかもしれません。
CursorHoldイベントの落とし穴
しかも、Vimには指定された時間が経過したら関数を呼び出すタイマー機能がありません。
CursorHoldIやCursorHoldイベントで代用するという手がありますが、これにはイベントごとに時間を設定できない、
ポップアップが表示されているときは呼ばれない、カーソルが動くまで呼ばれないといった欠点があります。
この欠点は本質的に回避不能です。Vim本体にタイマー実行機能が搭載されるのを待つしかありません。
clientserver機能を使う
Vimのclientserver機能を用いると、処理が完了した際に機能を呼び出すコールバック機能を実装することが可能です。
ただし、X環境が必要になります。Windows上でも使用できますが、あらかじめ別のVimを用意しておく必要があります。詳しくは:help clientserverを参照してください。
- Comments: 0
- Trackbacks: 0
Home > Tags > vimproc
- Search
- Feeds
- Links


