2011年7月25日月曜日

Vim plugin開発の「行き詰まり」を打破する6つの方法

元ネタ「人生の「行き詰まり」を打破する6つの方法」

プラグイン開発の行き詰まりは……


Vimプラグイン開発は長丁場です。いくら考えても、ニッチもサッチもいかない難題がおとずれることがあります。
すべての行き詰まりは、「こんなことVimにはできないんじゃないか?」という行き詰まり「感」です。それは、私たちが感じている一つの感情。
今日は、Vimプラグイン開発における行き詰まり「感」を解消する6つの突破口を紹介します。

1.「Vimの限界を突破する質問」を投げかける



「あなたが今、Vimの限界を感じていることは何ですか?」
「あなたがそのVimの限界を感じるたびに、自分の頭のなかでくりかえしている"問題"や"つぶやき"は何ですか?」
「あなたがそのVimの限界をこえるために役立つ答えをくれる、新しく画期的な問題は何ですか?」

この質問は、Vim scripterのShougoさんが、相談者のVim限界をこわすために考案されたものです。

人の脳はとても、単純なコンピューター。同じ問題には、同じ解法を、新しい問題には新しい解法を返します。

えてして人は同じ問題ばかりを頭のなかでくりかえしループしているのですが、こうしてそれを「見える化」することで、Vimによる新しい解決策が見つかることがあるのです。

2.「Vimコントロールの輪」を見なおす


たとえば、ある画期的なVim pluginを作りたい場合は:
内側の輪(自分で直接、変えられるもの) ... 自分の設定、自分のプラグイン、外部コマンド、外部インタフェース、外部ライブラリ
外側の輪(自分で直接、変えられないもの) ... Vimの関数、組み込みコマンド、仕様、Bramさんのポリシー

行き詰まりを感じたときに、私たちがよくやってしまうのは「自分が変えられないこと(外側の輪)にモンモンと悩んでしまうこと」。

大切なのは、自分が今・ここで直接、変えられるものだけをハッキリ切り分けること。そこだけに注力し、他はスパッとやめてしまいましょう。

「幸福への道はただ一つしかない。それは我々の意志の力では、どうにもならないVimの仕様について、悩むことをやめることにある。」
ビーム・カーネギー

3.「召喚」する


自分では、解決できない問題にであったら、それを解決したことがあるエキスパートVim scripterをvim-users.jpのなかで、「召喚」しましょう。
眼をとじて、深呼吸をし、やりたいことを簡潔にまとめたら「その人を召喚」してみてください。
何を感じていますか? 何をいっていますか? どうVim scriptを書いていますか?
きっと、あなたと違う新しい答えのヒントが見つかるはずです。

4.世界をunite化して考える


世界的に有名な「unite.vimによるカイゼン」。そのコツは、どこにあるのでしょう?
それは「世界をunite化して考えること」。
今までのインタフェースをすべてunite化する勢いで改善策を考えるという手法です。
人の頭はどうしても、今までのインタフェースに引きずられがちです。だから行き詰まってしまう。何ごとも「思い切って、unite化して改善できないか考えてみる」というスタンスが大事なのです。

5.脱力して、静かに継続する


行き詰まり感には、「他のプラグインで実装されるのではないか」という恐怖や焦りがつきまとっています。
それによってバグを仕込んだり、やる気がなくなったりするがために、うまくいかないのです。

Vim界が変化することにも、時間がかかります。
実は何も「行き詰まってはおらず」、冷静、丁寧、正確に、静かに物ごとを継続することで、少しずつうまくいっているのかもしれません。
Vim scriptは大変奥が深いです。その深淵を垣間見るためには、一年や二年のVim scriptingでは不十分です。
10年間メンテナンスするつもりで、気長に開発しましょう。
neocomplcacheやvimshellのように、三年以上継続して開発するその熱意こそがVim scriptには求められます。

ビムナムの禅僧であるビム・イズ・オールは言いました。
「微笑んで、深呼吸して、ゆっくりVim pluginを開発しよう」
脱力して、一行ずつ、静かに継続。

6.思い切って、Vimのない生活もする


「体の疲れは、Vim scripting力をも落ち込ませる」ーーこれはVim学的にも明らかで、だれもが経験していることですが
肝心なときに忘れていたりします。

人は長い間Vim scriptのみに尽力することは難しいです。
何か大きな壁にぶち当たった場合、時にはVimやPCのない環境でVim scriptのアイディアをじっくりと練ることが効果的です。
Vim plugin開発はPCやVimの存在には依存せず、脳内や手書きのノートでも十分可能であることがVim plugin開発者のShougo氏により実証されています。

「Vim pluginに対するやる気がでない。ちょっと待って……。もしかして、私、疲れてる?」
自分にこう聞いてみるだけでいいのです。もし、答えがイエスなら、思い切ってVimプラグイン開発に休みを取りましょう。
Vim休暇を使うもよし、ネットサーフィンに出かけるもよし、ちょっと早寝するのもよし、ゲームに興じるのもよし、です。
 ゆっくり休んで、Vim scripting力を充電し終わったら、意外とケロッとしているかも!?

Vimの限界は、頭のなかでつくられたもの


Vimにおいて、本当にしょうがないことは、だれもがキッパリあきらめています(例:Vimの画像表示)。

行き詰まり「感」があるということは、まだVimで実現できる可能性があると、心の深いところは感じていること。
Vimから一歩引いて、スローダウンして、Vimの周囲を大きく考えて見れば、意外とカンタンに道は開ける。

2011年6月19日日曜日

earthquake.gemをWindowsで試してみた件

jugyoさんが開発した、earthquake.gem。
最近はtermtterではなく、こちらの方が良く開発されているため、vimshell対応もするべく調べています。
シンタックスを対応させたので、ようやくvimshellでも普通に動くようになりました。が、自動更新はカーソル位置がおかしくなったりしますね。
もっと調査が必要です。

それはともかくとして、earthquake.gemはインストールが面倒くさいです。
Ruby 1.9を使っているので、まぁそっちに乗り換えればよいのですが
ディストリビューションの多くはruby = Ruby1.8だったりしているので……。


この記事のように、RVMなんかを一緒に使おうとしたらハマるし。個人的にRVMは嫌いです。

さてLinuxではearthquake.gemを使うことができるようになったんですが、どうやらWindowsで使っている人がまずいない。
私はtermtterをWindowsでも使用しているので、非常に困ります。
ということでWindowsで試してみました。
とりあえず、bin/earthquakeを実行してみて、エラーになるモジュールを片っ端からgem installしていきます。

しかし、twitter-streamをインストールしようとするとNative extensionのビルドでエラー。

今度はDevelopment Kitを使ってみた。
次はeventmachineのコンパイルでエラー。勘弁してください。


cmain.cpp:752:6: error: cannot convert 'stat*' to '_stati64*' for argument '2' to 'int _fstati64(int, _stati64*)'


検索してみると、やはり同じところで悩んでいる人がいて情報を発見。
http://stackoverflow.com/questions/3649252/cannot-install-thin-on-windows
eventmachineは入ったんだけど、gemが古いeventmachine-0.12.10をインストールしようとする……。

$ gem specific_install -l git://github.com/voloko/twitter-stream.git

で何とかすることにした。またeventmachineでエラーが出た。
というか、gemsのeventmachineだれか新しくしてください……。どうして放置されているんだ。


結論:WindowsでRubyを使うのは苦行。昔からそうですけど、WindowsでRubyは使いにくいですよね。どうしてこうなった。
twitter-streamのインストールも失敗。earthquake.gemが自動更新しようとするとエラーになります。

ちょっと試してみた感じ、Windows環境でもエスケープシーケンスが普通に表示されていますね。
vimshellから使うので問題はないですけど、Windows環境のことを全く考えていないのはどうなのかな……。

2011年5月15日日曜日

ujihisa.vim行ってきました

表題の通り、ujihisa.vimに参加したので今のうちに感想とかでも書いておきます。
UST無かったのが残念ですけど、詳しい内容については他の人の感想ブログでも読めばおそらく察しが付くと思うので、私は適当に思ったこととかを書き連ねておきます。

1.ujihisaさんの「shadow.vim紹介」
私は作業をしていたので、あまり見てませんでした。shadow.vimはJava Script/Coffee Script書くひとには便利なのかなーと思ったり。

2.kanaさんが.vimrcをDisる
これは面白かった。他の人の.vimrcには摩訶不思議な設定がたくさんありますね……。
私も昔はあんな.vimrcだったなぁ、とか思い出しながら見ていた。

3.niwaさんの「Twitter社でのVim+α」
どうやらTwitterでVimを使っている人はものすごく少ないらしい。
TextMateやEclipse使いが多い。
もっとVim使いが増えると良いですね。
残りは時間が余ったので? ユニコードの話。
ややこしい問題が多すぎる……。

4.guyonさん「Vim-tinyの紹介」
突貫で作ったらしい。Vimの機能制限版Vim-tinyの紹介。
512MBしかないLinux Boxではサイズが小さい
Vim-tinyが便利らしい。

5.ujihisaさんの「vital.vim解説」
プラグイン製作者に必須のプラグインvital.vimの解説。
Vimプラグイン製作者は毎日車輪の再発明をしているので、このライブラリは便利です。

6.Shougoの「5分で分かるVimとVim plugin(仮)」
私の発表です。実は、開発環境勉強会でこれを発表しようとしていました。
が、先日の大地震により断念。今回、スライドをパワーアップさせて発表することになりました。
いつもは真面目な発表なので、今回は不真面目です。
参加者からは「これはひどい」「一瞬会場間違えたかと思いましたが、考えてみればいつも通りでした」と絶賛の嵐でした。
スライドは公開しています。こちら。

7.sora_h君のカオスな発表
会場でスライドと発表するためのプラグインを作っていました。
内容はsora_h君の一日。metarwで作った自作プラグインの紹介、Rubyの効果的なバグ報告の仕方、など。
バグ報告の仕方については、Vimのプラグインでもそのまま使えるなーとか思った。

ちなみに、その後は座談会とかする予定だったんですけど、思ったよりも時間が長びいて、
私がプラグインのバグ修正とかに一生懸命だったおかげで流れてしまいました。
残念だったなぁ……。

2011年4月25日月曜日

普通のVim使いのYokohama.vim #1感想

タイトル通り、Yokohama.vim #1に参加してきたので、その感想です。
ちなみに、詳細な感想については他の人たちがもっと優秀なまとめを書いてくれるので省略します。

・Vim Levelでシャッフルと自己紹介
今回のVim Levelシャッフルはあまり意味がなかったような……。グループ分けはなし。
なぜか私が一番レベル高いということになってしまったし。
ぼくはふつうのVimつかいです。
もしkanaさんが来てくれていたら、kanaさんはおそらくLvが9~10なので、一番レベルが高かったはずなんですけどね。
あのレベル分けはネタなので、もっと良いレベル分けの方法があると良い、という話をthincaさんとしました。

時間がそれほどないということで、自己紹介はテーブル毎。偶然ですが、るびきちさんと同じテーブルになれてよかったです。

・「ふつうのVim使いの開発環境」
私の発表です。資料はこちら。
実はお流れになった開発環境勉強会用のスライドを発表する予定だったのですが、
開発環境勉強会がいつ開催されるかよく分からなかったので、予定を変更して自分の開発環境晒しにしました。
本来はよくある地味な発表なんですが、それでは詰まらないと思ったため
いくつかネタを仕込んだり、開発における裏話もしました。

・「るびきちさんとの対談」
残念ながら、ここはustなしで参加者だけの特別セッション。使用しているエディタの枠を越え、二人でかなり盛り上がりました。
ただ、他の人は置いてきぼりになってしまったような。
るびきちさんと私の考えがかなり似かよっていて面白かったです。
開催者のguyonさんには、時間をオーバーしてしまって済みません。
実はkanaさんも含めて、三者対談というのをやりたかったんですけど。
内容については、#yokohamavimのTweetや他の人の感想を見れば大体分かるかと。
残念ながら、聞けなかったそこのあなたも大丈夫。実はこの対談は……。以下続報を待つように。

休憩を挟んで、

・VimとEmacsユーザー交流セッション
ここも実はるびきちさんと議論を交わしていました。
あまり真面目に回答していないけど、あれで良かったのだろうか……。
みんなの回答のまとめは、おそらくguyonさんがしてくれると思うので、楽しみに待ちましょう。

・Vim Golf
実は私Golfぜんぜんできないんです。なぜかというと、素のVimだと発狂するから。
Golfは他の人に任せます……。
記念品として貰った、Yokohama.vimのノベルティが格好良かったですね。

・懇親会
るびきちさんが参加してくれなかったのは残念だったのですが、私を含めて十数人の方が参加してくれました。
前回はたった6人だったので大きな進歩。
こちらとしても、thincaさんのvcs.vimを見れたり、
snippets_completeに要望を貰ったりとなかなか得るものがありました。

・総括:
るびきちさんが来てくれたのもありますが、かなり充実した一日を過ごすことができました。
会場のセッティングと司会進行をしてくれたguyonさん、ありがとうございます。
機会があれば、またるびきちさんといろいろ話をしたいですね。
ちなみに、開発環境勉強会で使う予定だったスライドは5月のujihisa.vimで使用する予定です。お楽しみに!

2011年4月18日月曜日

Software Design 2011年5月号レビュー&感想

今回久しぶりにレビューするのはSoftware Design 2011年5月号です。Vim&Emacs特集ということで、ついカッとなって購入してしまいました。後悔はしていません。
しかし、最近雑誌を購入するのはエディタ特集のときだけ……。

第一章


基本的な話なので省略。

第二章


findの使い方が載っているのは良いですね。あまり使わないとよく引数を忘れます。procの説明もあって、あれ? この特集ってエディタの話が主だったはずじゃ……。

第三章


サーバ管理とファイル編集の話。エディタの話が全然でてきません……。

第四章


ここはようやくVimの話。ということで、詳しいレビュー(というか正誤表?)をお送りします。

Vim基本編



P.45
「某OS付属のチープなエディタ」……「メモ帳」ですね。分かります。

「分割したウィンドウを閉じるのは「:q」コマンドです」……まぁ、間違ってはいないですが、:closeのほうが良いと思います。:qだと、ウインドウが一個のときに終了してしまうので。おそらく、:closeは冗長だから:qを紹介したんでしょうね。:qは、「ウインドウが一個のときは終了、そうでないときはアクティブなウインドウを閉じる」という動作をします。ちゃんと説明すれば混乱することはないと思いますが、初心者には分かりにくいかもしれません。

P.46
リスト1……nmapを使ってはいけません。nnoremapを使いましょう。nmapだと、キーマッピングが展開されてしまいます。例えばkanaさんのように、: -> ; とキーをマッピングしている場合に問題が発生します。nmapとnnoremapの違いを理解している人は少ないので注意が必要です。
:bpよりは、:bprevious, :bnよりは、:bnextのほうが良いと思います。.vimrcに書くときはできるだけコマンドを省略しないようにしましょう。

修正例:

nnoremap <C-p> :bprevious<CR>
nnoremap <C-n> :bnext<CR>

Vimプラグイン編:
紹介されているのは、surround.vim, NERD_commenter.vim, unite.vimです。ちなみに、unite.vimが雑誌で紹介されるのは初めて!


unite.vim
私の書いたプラグインなので、ここは詳しくフォローしておきます。
unite.vimはgithubにもありますが、vim.orgにもあります。ただし、vim.orgにあるのはまだ古いバージョンのため、githubの紹介しておいたのは正解でしょう。できれば、git cloneで取ってくる部分の解説があると良かったですね。

-buffer-nameに関する解説がないのはちょっと致命的です。ファイルやバッファ系のsourceを指定する場合は、:Uniteの引数に-buffer-name=filesとしないと、~が展開されません。人によってはひどく不便になる可能性があります。

この特集では、unite.vimのsourceが一つしか指定されていません。これでは機能がFuzzyFinderやku.vimとあまり変わらず、unite.vimの特徴が生かせません。sourceを複数指定して横断検索できることを触れておくと、良かったと思います。

細かい部分ですが、unite.vim, unite, Uniteと表記が揺れているのが気になります。ちなみに正式名称は検索しやすいように、unite.vimです。

第五章


ようやくEmacs特集です。初心者向けのレスキュー技が細かく書かれているのがすごく印象的でした。こういう記事は今まで見たことがなかったので。Emacs使ってみたけどよく分からなくなってしまった初心者には役立つ記事でしょう。Emacsからのシェルの起動ということで、M-x terminal-emulatorが紹介されていました。個人的には、M-x terminal-emulatorよりはM-x ansi-termやM-x multi-termの方が一般的かな、と思います。この章で一番驚いたのは、井上さんがeshell使いだったことです。私もvimshellを開発しているので、eshellの良さはよく分かります。最近るびきちさんもeshellに乗り換えたようですし、eshell界隈が熱くなってきましたね。

第六章


端末使用時のトラブルシューティング的な章。Windowsでtelnetからのリモートログインのやり方が載っていたのは、ちょっと珍しい記事だと思いました。

結論


Vimの部分は思っていたよりもよく書けていました。unite.vimが初めて雑誌に紹介されていたのも嬉しいです。Emacsの解説は比較的少なかったのですが、「Emacsトラノマキ」が最近レベルが高くなってしまっているので、初心者に配慮したのでしょう。エディタ好きなら買うしかない号だと、私は思います。管理者向けの話も多いので、エディタをよく使う管理者にもオススメ。

2011年3月20日日曜日

魔法Vim少女 えでぃか☆エディタ

2011年4月22日追記:元ネタである、「魔法少女まどか☆マギカ」が無事最終回を迎えたため、記念としてアップデートしました。魔法Vim少女の設定を追加したため、人物の名前を改変。

※:元ネタはlingrでのやりとりです。しかし、改変をしたり、新たな設定を付け加えています。
ついカッとなってやったが、満足している。

大本のネタである、「魔法少女まどか☆マギカ」についてはこちらを参照してください(Wikipediaへのリンクです)。


『魔法Vim少女 えでぃか☆エディタ』(まほうびむしょうじょ えでぃかえでぃた)は架空のテレビアニメ作品。20XX年1月より放送……されることはない。

あらすじ



三度の食事よりVimが大好きな、普通の中学2年生の「えでぃか」は、ある日不思議な夢を見る。そこは少女がコーディング能力を競ってエディタ戦争を行う異世界。その少女の戦いを目撃する自分と、謎の猿の生物に「僕と契約して魔法Vim少女になってほしい」と告げられる夢であった。翌朝、転校してきたのはなんと夢で見た美少女のゆなだった。ゆなは、えでぃかに「魔法Vim少女になってはならない」と警告する。

放課後、親友の「ねおこ」とPCショップへ行ったえでぃかは謎の声に呼ばれ、ビルの一角へ迷い込む。そこで見たものは夢の中で見た生物ジンべえの傷ついた姿と、それを殺そうとするふぁらの姿だった。えでぃかとねおこは戸惑いつつも、当たり前の優しさからジンべえを助けるが、直後に今度は本当に異世界へ迷い込んでしまう。エディタ使いの信者と称される化物達に囲まれた2人を救ったのは、同じ中学の3年生でジンべえと契約した魔法Vim少女の「ふぁみ」先輩だった。事後、改めてジンべえに「魔法Vim少女になってほしい」と告げられたえでぃかとねおこは、思いがけない好機に興奮する。だが、それは2人が直面する様々な苦難の始まりであった。

各話リスト


サブタイトルは各話の登場人物の台詞から取られている。

第1話 あのプラグインにもあった、ような・・・・・
第2話 Vimスクリプトで制御できるなら、それはとっても嬉しいなって
第3話 もう何も恐くない
第4話 neocomplcacheも、uniteも、あるんだよ
第5話 非同期なんて、あるわけない
第6話 こんなの絶対おかしいよ
第7話 本当のVimと向き合えますか?
第8話 あたしって、ほんとバカ
第9話 そんなの、あたしが許さない
第10話 もう標準機能には頼らない
第11話 最後に残った道しるべ
第12話(最終回) わたしの、最高のプラグイン

解説


あのプラグインにもあった、ような・・・・・:
似たような関数があらゆるプラグインで再実装されている際に、皆が思う一言。Vimスクリプトの標準関数が貧弱なことによる車輪の再発明である。素直にvital.vimを使いたいものだ。

Vimスクリプトで制御できるなら、それはとっても嬉しいなって:
すべてがVimスクリプトで制御できたら、Emacsのようにもっと何でもできるのだが……。残念ながら、現実はそう甘くない。Vimスクリプトに慣れてきた中級者はその現実に打ちのめされることとなる。

もう何も恐くない:
Vimに慣れてきた人たちがついつい思ってしまうこと。本当に怖いのは、「Vimは何でもできる」と極めすぎる一部の人たち(へんたい)の執念なのかもしれない……。Vimのみで複雑なことをするためには、それ相応の苦労が必要である。

neocomplcacheも、uniteも、あるんだよ:
最近のVimには、neocomplcacheもuniteもあるんだよ! まだまだ進化するよ!

非同期なんてあるわけない:
Vimで非同期通信は不可能と思われていたが、実際にできてしまった。ただし、ライブラリのコンパイルが必要である。

こんなの絶対おかしいよ:
Vimの仕様や魔界村のソースコードに対して皆が思う感想。

本当のVimと向き合えますか?:
魔界村のVimソースコードにきちんと向き合えるか、ということを表す。これができるかどうかが、Vim上級者への分かれ道なのかもしれない……。

あたしって、ほんとバカ:
Vimからでない生活が続くたび、時々自虐的に思うこと。あまりにもVimにこだわりすぎることは逆に生産性を落としているのではないか? しかし、やめられないのである。

そんなの、あたしが許さない:
「VimがXXXできないなんて、そんなの、あたしが許さない。すぐに実装してしまうよ!」ということ。
こういう思考が日常になってしまうと、危ない。

もう標準機能には頼らない:
Vimの標準機能には頼らず、機能を独自に実装することを決意したということを表す。標準機能はほとんどカスタマイズできないからである。

最後に残った道しるべ:
Vimへの信仰心が失われたソウルジェムは、魔法Vim少女を取り込み「信者」へと変化する。
この最悪のシステムに、疑心暗鬼へと陥る魔法Vim少女達。
最強の信者達が集う「ワルマックスの夜」を前に、残ったのはゆなとえでぃかの二人だけであった。
果たして、Vimには未来がないのか? この世界はジンべぇの思惑通りになってしまうのだろうか。

わたしの、最高のプラグイン:
ゆなは一人魔法Vim少女となって戦うが、「ワルマックスの夜」は予想以上の強さであった。
彼女でさえも絶望しそうとなったその時、一人の少女の願いが明かされる。
魔法Vim少女 完結。

魔法Vim少女一覧


魔法Vim少女たちは、「プラグイン」と呼ばれる魔法兵装を身につけ、日夜信者達と戦っている。
ここでは魔法Vim少女達の能力について解説する。

えでぃか:まだ魔法Vim少女となっていないため、その力は未知数であるが、ジンべぇからは「最強の魔法Vim少女の素質を持っている」と言われる。

ねおこ:プラグイン名「ネオコン」。高速補完により、相手にキーワードの羅列をたたき込む戦法が得意。

くらん:ふぁみの敗北により、他の地域よりやってきた魔法Vim少女。いつも何かのスクリプトを書いている。プラグイン名「クイックラン」。記述したスクリプトを瞬時に実体化させ、戦わせることができる。

ふぁみ:先輩の魔法Vim少女。プラグイン名「ビムファイラー」。ファイルを変化させた、トリッキーな戦法を得意とする。

ゆな:プラグイン名「ユナイト」。本人の基本能力は最低。ただし、sourceを抽出した他の魔法Vim少女の能力を使用することができるという、ある意味最強の能力を持つ。

Vimの魔法

元ネタはこちら

こんにちは
こんにTwitVim
ありがとう
ありがtaglist
こんばんは
こんbufexplorer
さようなら
さよNERD_tree
まほうのエディタで
たのしいプラグインが
ポポポポーン

おはよう
おhatena-vim
いただきます
いただきまsmartchr
いってきます
いってきまscratch
ただいま
ただいmanpageview
ごちそうさま
ごちそうさmatchit
おやすみなさい
おやすmigemo
すてきなエディタで
ゆかいなプラグインが
ポポポポーン

こんにちは
こんにTwitVim
ありがとう
ありがtaglist

あいさつするたび
プラグインふえるね




※:久しぶりに、ついカッとなってやった。反省はまだしていない。
ちなみに、プラグインの選定は語呂がよいものを適当に当てはめただけです。特に他意はありません。

補足:
「あいさつするたびプラグインが増える」とは、日に日にVimのプラグインが増殖していることを暗示しています。