2010年11月10日水曜日

Unite使いのレベル10

転載元 https://gist.github.com/669964
gistの中に埋もれているのは勿体ないので転載しました。
作者はujihisa氏。
ちなみに、私はLv10……でいいのか。
元ネタ:Vim使いのレベル10 http://vim-users.jp/2010/01/vim-10-levels/

Unite使いのレベル10


Lv1 Uniteを使うため、他のエクスプローラ系ツール(※1)の使用をやめた。Unite公式ヘルプを読み終えた。
Lv2 単に:Unite file_recするだけの生活をやめ、他の豊富なsourceを同時に使うことに自己陶酔する。
Lv3 自分でインストールしたUniteプラギンの数が5を越え、ダメプラギンはすぐに判別できるようになる
Lv4 自分で作ったUniteプラギンをunite.org(※2)でリリースし、何人かをLife Changingさせる
Lv5 他のアプリケーション使用時にUniteが使えないことにひっかかり、イラっとする日々を送る
Lv6 シェルは当然Unite。新しいプロジェクトをはじめるとき、まずそのsourceをUniteするところからはじめる。
Lv7 Unite本体のソースコードを読み終え、あまり魔界でないことに驚く
Lv8 他言語インタフェースif_***を作り、unite_devに投稿する。当然採用されない
Lv9 Unite本体の開発への貢献が日常になる。投稿し採用されたパッチ数が100を越える
Lv10 になる

※1:他のエクスプローラ系ツールとしては、NERDTree, ku.vim, FuzzyFinder等があります。
※2:unite.orgは実在しますが、unite.vimとは関係がありません。

2010年10月27日水曜日

興味のある言語にVim scriptと書いておいたら面接で爆笑された

Inspired by 興味のあるテキストエディタにVimと書いておいたら面接で爆笑された
あと、tyruさんとの話に触発されました。

UNIXエンジニアを募集してる会社の採用面接を受けた時の話。

転職エージェントに作れと言われて作ったシートに、「興味のある技術/言語」という欄があったんです。

自動補完技術とか色々書いたけど、プログラミング言語の中で興味があるのはVim scriptだったので、

Vim scriptと書いておいたのですが、それを見た面接官のリアクションが酷かった。

面接官「Vim script・・・ふははっ!Vim script!」

面接官「Vim scriptやってるんですか?wwwww」

俺「(唖然)は、はい・・まだVimでシェルが書けるようになったぐらいですが。。」

面接官「Vim script・・・ニヤニヤ」

その人はUNIXエンジニアで、当然Vimでコードを書いている人だったので、

VimがEx commandを拡張した「Vim script」を使っていることを知らないワケが無いだろうと思っていた。

つまり、このリアクションは"理不尽な状況に直面した時にどう対応するか"を見ているんだろうと判断し、あえて突っ込みは入れずに対処した。

しかし最後の質問で「何故Vimを使っているんですか?」と聞くと、

気まずそうに理由を話し、最後に「・・・と、聞いてます」と答えた。

つまりこの人は上からVimを採用すると言われたから使っているのであって、

特別使うツールに思い入れとか無い、悲しいエンジニアなんだなあと分かった。

最近のVimは頑張ればEmacsのような非同期処理もできるし、VimやってるならVim scriptに興味を持つのは普通だと思うんだけどなあ。

多分ガチで知らなかったんだろう。

2010年10月25日月曜日

Saint Vimmer

mattnさん作の原文 Saint Vimmer

教皇「ネオ・コンプリートフラーーーッシュ!」... スゴゴゴゴゴゴゴゴ ...
セイヤ「ごぶぅ(吐血)... 」
教皇「お前はvimshellの海へと消えるのだ。フハハハハハ...」
セイヤ「まっ... まだだ...」
教皇「何!?」
セイヤ「俺はここで倒れちゃいけない... 燃えろ!俺のESCキー!」
教皇「何度でもかかってくるがいい!」
セイヤ「ウォォォオォォォォォ!」
教皇「ぬるいわ!この程度の速さなら私の足元にも及ばぬわ!」
教皇「... 何... はっ速い... !? 奴の何処にこれほどの力が!」
教皇「ま... まさかっ!」
セイヤ「受け取れ!ユナイトビューティフルアターーーーック!」
教皇「グワァーーーーーーーーーー...」(完)

mattn先生の次回作にご期待ください!

※ これは後世まで語り継がなければならないと思い、ついカッとなって転載した。反省はしていない。ちなみに、私は元ネタをよく知りません。

2010年10月9日土曜日

Vim Shaddai

『Vim Shaddai』
※:El Shaddaiのムービーを脳内再生しながら見てください。

話をしよう

あれは今から36年 いや20年前だったか

まぁいい

私にとっては つい 昨日の出来事だが
君達にとっては きっと 明日の出来事だ

彼には72通りの名前があるから、
何と呼べばいいのか
確か、最初に会ったときは……
Vimnoch(ビムノック)

そう、アイツは最初から言う事を聞かなかった
私の設定通りにしていればな

まぁ、いいエディタだったよ

Vim Shaddai

ブラム「そんなプラグインで大丈夫か?」
ビムノック「大丈夫だ。(動いているから)問題ない」

ウォーーーー!(コーディング シーン)
うわぁ……

は言っている ここでクラッシュする定めではないと

(時が戻る)

Vim Shaddai

ブラム「ビムノック、そんなプラグインで大丈夫か?」
ビムノック「一番良いやつを頼む

unite.vim

git clone git://github.com/Shougo/unite.vim.git
(プラグインをインストールする)

ウォーーーー!(コーディング シーン)
神は言っている 全てを繋げ

これは神が作り出した知恵(プラグイン)の一つ
フフフ 見ての通り、非同期

やあ 私のサポートが心配なのか?
いいんじゃないかな
アイツも良くやってくれてるしね

いや 君の頼みは断われないよ
神は絶対だからね

(コーディング シーン)

ビムノック 人が持つ唯一絶対の力
それは 自らの意思で使うべきエディタを選択することだ

お前は常に人にとって 最良のエディタを思い 自由に(実装する機能を)選択していけ
さぁ いこう

ストルマン「さあ ビムノック」
ストルマン「私のかわいいEmacsが 悲しむのなんて嫌」
ストルマン「さあ 行きなさい あなたたち の敵を取るのです」
(多数のヌーが現れる)
(そして始まる宗教論争

To Be Continued……

チリリリリ(電話の音)

ああ やっぱり今回も駄目だったよ
あいつは設定しないと使えないからな
そうだな 次はこれを見ている奴にも(プラグイン作りを)付き合ってもらうよ


※:この物語はフィクションです。ついカッとなってやった。反省はしていない。
2011/1/27 リンク先を追加しました。

2010年9月26日日曜日

Yokohama.vimに参加しました

昨日、Yokohama.vimに参加してきました。
残念ながら来れなかった人も居ると思われるので、簡単な感想を書きます。
thincaさんの感想記事とあまり被らないように、私は懇親会の話題を中心に。

最初はポジションペーパーを書きながらグループごとに自己紹介をやりました。
これはなかなか新鮮で面白い試みであったと思います。
ちなみに、私の前にはkhikerさんとnaoinaさんが居ました。
Vimの戦闘力は500以下の人達がほとんどでしたね。余裕で1000オーバーの私は異端なのか……。

次にguyonさんによる.vimrcの初心者向けの解説。なかなか親切だと思いました。
私には易しすぎましたが……。資料が公開されるのはいつですか?
資料が公開されました。

その後休憩を挟んでからVimmerの平均レベルが均等になるようにグループ分けをして.vimrcリーディング大会。
なぜか私が一番レベルが高いことになっていたんですけど、あの中でVimのソースをいじっていたのはtyruさんくらいなので、
彼が一番レベルが高いはずなんですけどねー。参考
ちなみに、この記事はレベルが高すぎて該当者が少ないので、guyonさんによるより細かいレベル分けが提案されていました。
これも公開されると面白いですね。
で、.vimrcリーディングですが、私の班は私の.vimrcを読むことになりました。3000行オーバーしてるので、なかなか無謀な試み。せっかくなので、neocomplcacheとvimshellの設定を解説。しかし、皆さん反応が少ない。結局私だけがしゃべっていたが、これで良かったのだろうか。
理想的には、前のプロジェクターに誰かの.vimrcを載せて、それを解説していくほうが良かったと思います。グループに分かれるとみんなシャイだから、何も語らないので困る。

グダグダになっていたところ、時間が押しているということで、taku_oさんの発表。削除するキーマッピングの打鍵数を最適化しよう、というすごくまじめなプレゼンでした。ちなみに、私はここまで徹底的に減らそうとはしていません。キーマッピングのほうにこだわっているので。資料が公開されました。

そして私の発表。今まで私がやってきたプレゼンとunite.vimについて。
本当はもっとまじめな発表だったはずなのだが、なぜかネタが混じって……。
詳しい内容は後日公開予定のプレゼンを見たほうが早いので、そちらを参照してもらうことにします。
資料を公開しました。
ちなみに、こちらはVim=VMのプレゼンです。

時間が余ったのとリクエストがあったので、私のVimを30分ほどデモしていました。
uniteのデモをやったり。iexe termtterのデモもしたかったんですが、ネットの調子が悪くてつながらず。

そして懇親会。集まったのは6人だけ。ちょ、みんなそこまでシャイだったのか。
普通懇親会はもっと人が集まるはず……。
VimmerはRubyistよりシャイだったという衝撃的な事実。

懇親会で出た話題
・unite.vimを今後どうするか?
→thincaさんとはいろいろ話し合いをしたので、いずれメインで使ってくれるはず。
matcherやsorterについては後回しにする。まずはsourceの仕様を固めないと。
タグジャンプ欲しいね、とか。
・ns9tksさんの話がちらりと出たり
→「相反する要望に対応するのは大変」
・今後のYokohama.vimはいつ開催する?とか
・会社のVim使いをどうやって増やせばいいだろうか
→Emacs使いも本当に使いこなしている人は少数派。頑張れば引き込めるよ!
・neocomplcacheは英語ヘルプがあるから、海外の人からメールがくるよ、とか
→ちなみに今日も久しぶりにメールがありました
・Vimを勉強するにはどうすれば?
→まずはvimtutorをやる。日本語版もあるよ。
:helpを読むのは大変なので、他人の.vimrcを参考にしつつ、分からないところを:helpで引くという使い方がおすすめ。
kanaさんの.vimrcは変なマクロを使っているので、コピペするときは注意。ちなみに、私はそういうマクロを使っていない。
あまり良い本はない。オライリー本も第7版は英語しかないし。
・Vimはバッドノウハウが多いよね……
→encodingとかマッピングとか、set, setlocalとか……

ちなみに、guyonさんはneocomplcacheをまだ使っていないそうですが、もうそろそろ使ってくれることでしょう。
今回の勉強会でuniteについて宣伝をしたので、使う人が増えるといいな。
.vimrcが500行を越えている人はなかなかいないので、Vim使いも初心者が多いんだな、という印象。
LvUPするための高い障壁が原因になっている気がする。周囲にすごいVimmerが居れば話は別なんですが、普通はいない。
私も独学だったし。

懇親会は人数少なかったけれど、得るものが多かったので良かった。
やはり勉強会だけでは深い話ができないので、懇親会大事だなーと思いました。
ただ発表を見るだけだったら、ust参加でも良い訳で。
特に、tyruさんやcooldaemonさん、eagletmtさんと話ができなかったのが痛いですね。
次回こそは……。

2010年9月3日金曜日

WEB+DB PRESS Vol.58 「Emacs活用∞」レビュー

LingrのEmacs部屋で「Emacs活用∞」について話していたら、tomoyaさんに「ぜひレビューしてください!」と言われてしまったので、こちらでレビューをしておこうと思います。
ちなみに、私は去年の「Vimの流儀」号とこちらの「Emacs活用∞」しかWEB+DB PRESSを購入したことがありません。どんだけエディタに毒されているんだ、私は……。

では、それぞれの項目について簡単な紹介とレビューをしておきます。

Emacsの世界へようこそ


この章はEmacsの紹介が主です。キーボード配列の変更という、初心者には敷居が高い設定も含まれます。

最初に知っておきたい基礎知識


Emacsのインストール方法と、設定ファイルのディレクトリ構成、基本的なキーバインドの紹介です。
よくある解説が続くので、熟練者には物足りないでしょう。

自分好みにカスタマイズするためのポイント


Elispのインストール方法、auto-installの紹介です。簡単なカスタマイズについても触れられています。

導入必須の便利な拡張機能


各種プラグインの紹介です。解説はかなり駆け足。やはりページ数が足りなかったようです。

Emacsの操作性に革命を起こす「Anything」


この特集のメインだと思われる、anything.elの紹介。anything.elのインストール方法以外に、設定やコマンドの定義方法も載っています。
が、こちらもページ数が足りないのか、「anything.elのソースを作成する」までは触れていません。

思考を即コード化する開発環境


開発に役立つ拡張機能の紹介です。私が知っているような有名所が多かったですね。最後にEmacsコミュニティについて若干触れています。
この特集を読んで、Emacsの開発に協力できるような人が増えるといいですね。

まとめ


本特集は基礎知識を高めることに重点を置いているようです。
Emacsテクニックバイブルでは基礎知識をかなり省いて、プラグインの紹介を重視しているため、
この特集を読んでから、Emacsテクニックバイブルを読むのがよいでしょう。
残念だったのは解説がかなり駆け足だったのと、Emacs lispについてはほとんど触れられていなかったこと。
るびきちさんがEmacs lisp解説本の構想を練っているようなので、そちらに期待したいです。
あとはSoftware Design誌に連載されている、「Emacsのトラノマキ」がいつ単行本化するのかが気になっています。
なぜか最近勢いにのっているEmacs陣営。これはVimも負けていられませんね。

2010年8月28日土曜日

Vim Kaigi 2010に行ってきました

昨日からRuby Kaigi 2010が開催され、その中の企画イベントとして「Vim Kaigi 2010」が開催されました。
これなかったVim使いもたくさんいると思うので、詳細について詳しく書きたいと思います。

Highlights of Vim 7.3 by kana


最近リリースされたばかりのVim 7.3の新機能についてkanaさんから解説がありました。
Vim 7.3は日本語情報が少ないので貴重ですね。

Persistent undo


アンドゥ情報の保存をする機能。有効にするためには、set undofileを.vimrcに追加する。デフォルトでは開いているファイルと同じ場所に保存するが、別の場所にすることも可能。

Conceal text


マーカーなどを隠す機能。前からパッチは存在していたが、ようやく本体に取り込まれた。
texのシンタックスファイルも対応していて、対応する記号を変換したりできる。
これを利用すれば、Haskellのlambdaも置き換えたりできる。やってみたが微妙だったらしい。

relative number


「私はいらない」とはkanaさんの談。たしかに番号が気持ち悪い。jやkをcount付きで移動するときには便利なのかな。

colorcolumn


人によっては欲しいらしい。カラムをハイライトできる機能。複数のカラムもハイライトでき、相対的にも設定できる。

その他


gettabvar(), undotree(), など。みなさんVim 7.3を使いましょう! という内容でした。

neocomplcacheで実現する究極補完環境 by ShougoMatsu


私の発表。内容はneocomplcacheについてで、スライドを見た方が早いと思います。
neocomplcacheで実現する究極補完環境
時間が余ったので、unite.vimやvimshell, vimfilerをデモしたりしました。が、かなりグダグダになってしまった。

Yokohama.vim by guyon


内容はスライドが公開されているので、それを見たほうが……。
Yokohama.vimの宣伝もありました。私は参加する予定。unite.vimの宣伝ができるといいなぁ。

ぼくがEmacsからVimに乗り換えた3つの理由 by _shimada


Railsのエンジニア。ジュンク堂に本が売っているらしい。Emacs歴は10年以上だが、左小指が限界になってVimに移行。左肩までダメージがくるようになったそうです。リアルでそういう人がいるんですね……。
rails.vim, surround.vim, snipMateを使っているそうです。

苦労したこと


サーバに入ると素のviが使えない


S式が使えない


Vimの中でEval bufferする方法がない


→quickrun, vimshellを勧めておきました。

vi怖い by nanki


sudo viしてファイルを壊してしまったという恐怖の体験談。compatible modeこわいです。
nankiさんはObjective-Jのオムニ補完を書いたらしいので、それの紹介もありました。
ちなみに、neocomplcacheはObjective-J対応を果たしました。

gdgd Q & A


LTも終わると、あとは質疑応答と私とkanaさんが適当にデモをやったりしました。が、さすがにそれでも長すぎた……。

まとめ


kanaさんを始めとする色んなVimmerと会えて、面白かったです。自分のプラグインの宣伝もできたし:-P。ちなみに、隣の席がbasyuraさんだったので驚きました。
ku.vimの読み方は「くー」らしいです。ちなみにkanaさんは現在Vim scriptを書いていないらしく、ku Ver.0.30のリリースは期待できなさそう。
やはりunite.vimを頑張るしかないのかな。
Vim Kaigiは最初50人くらいいて、Emacs部屋から椅子を借りてくるなど、「どうしてこうなった!」状態でしたが、3時間後にはメンバーが三人になり、強制撤収となりました。

2010年8月22日日曜日

x86勉強会

昨日、x86勉強会に行ってきました。

Javaで作るx86エミュレータ d_kami


x86エミュレータを作るためにどのようなJavaのコードを書いたか。
x86命令について丁寧に説明してくれていました。しかし、x86の符号化は大変難しいので、
あの説明だけできちんと理解できる人がいたのかは謎です。

x86とプロセスについて masami256


プロセスがx86上でどのように動いているかという話。これも濃かった……。大体分かったのだけれど、ちゃんと復習しないとこれは忘れてしまう。

実行トレーサで学ぶx86再入門


これは入門だったのだろうか……。すごく濃いです。OSのメモリ保護を書き換えて、アプリケーションに検出されない
トレースを行う話。Exploitなプロセスを解析する際に必要であるらしい。

今どきのx86開発環境 Shougo


私の発表です。内容については実際のスライドを見た方が早いと思うよ! 誰ですか? Vim勉強会と勘違いしていた人は。ぼくはまじめにx86のはっぴょうをしました。

中国製のMIPSエミュレータがどうやってx86をエミュレートするのか syuu1228


MIPSとx86のエミュレートの話。MIPS勉強会おいしいです。きれいなMIPSがだんだんよごれていくさまがよくえがかれていました。誰得なんだろう。ちなみにスライドが英語でした。

8088のエミュレーションについて hdk_2


伝説のプログラマーであるhdk_2の少年時代の話と、中学生の時に作った(らしい)8088エミュレータの話。これを中学生のときに作るだなんて恐ろしいです。私は中学生の時、RPGツクールだったなぁ。自分も端末エミュレータ頑張りたくなりました。

新しいx86トレーサの作り方 a4lg


x86トレーサを作るために、どのように設計したかという話。egggardenさんの発表と似ていましたが、すごく理論的な話でした。学会発表おいしいです。

オマケ:
hdk_2さんはkterm, vi使いでした。Vimは入っていませんでした。高度な開発を行うときはEmacsのようです。私はもうviや素のVimなんて使えません……。

昔からCPUの話が好きなので、x86は大好物なのですが、内容があまりに濃すぎておなかがいっぱいです。
これは復習が必要だ……。
発表資料が早く公開されないかなぁ。
ちなみに、私の資料も後日公開予定です。当日見れなかった人はもう少しお待ちください。

※ 8月28日追記:資料を公開しました。
今どきのx86開発環境

2010年8月8日日曜日

レビュー:Emacsテクニックバイブル

ついにEmacsテクニックバイブルが発売されました。
購入者の感想を見ると、おおむね好評のようです。
しかし残念なことに、購入者の詳細なレビューがまだありません。
そこで、私がレビューすることにしました。

はじめに


まず、現在のEmacs本には大きな問題点があります。※1
Emacsはデフォルトの状態ではひどく使いにくく、プラグインをインストールして拡張するのが当たり前となっているのに、普通の本にはプラグインのインストール方法やその特徴についてほとんど触れていないのです。これにはプラグインが流行り廃りが激しく、時が経つとすぐに時代遅れになったり、新しいプラグインが出てくるという理由もあるでしょう。確かに、時が経っても有用性を保っている「入門 GNU Emacs 第三版」のような本は必要です。しかし、世の中にあるのがそういう表面をなでただけの本ばかりでは、初心者がいざ本格的にEmacsを使おうとしたときに挫折することは目に見えています。Software Design紙で連載されている「Emacsのトラノマキ」が好評であるように、現在には現在なりのEmacsの使い方があるのです。私は以前からそう言う本が必要だと考えていて、「るびきちさんがそう言う本を書いてくれるといいな」と妄想していたんですが、最近になって「Emacsテクニックバイブル」を執筆中だということで、自分の妄想が現実になり、大変驚いています。

内容について


内容については、「今までのるびきちさんのブログに書いてあったことをまとめた」というのが適切です。
るびきちさんのブログをよくチェックしている人には、あまり目新しい情報がないかもしれません。しかし、「今までばらばらだった情報がまとまっている」ことに大きな価値があります。
特に秀逸なのは後半2章のanything.el特集です。anything.elに関する情報が適切にまとまっています。
私は現在Vimにおけるanything環境として、unite.vimを開発中です。Emacsテクニックバイブルの購入理由も、「もっとanything.elを勉強して、unite.vimの開発に役立てたい」ということだったのですが、期待以上の出来だったので満足しています。
難点なのは一部のプラグインを除き、一つ一つのプラグインの解説は1ページ~2ページ程度と少ないことです。これはページ数の関係でやむを得ないことだったのでしょう。私としては、多少値段が上がっても良いから、もっとページを割いて欲しかったのですが。特にskk(ddskk)の解説は少ないです。そこは続刊に期待しましょう。

おわりに


「Emacsテクニックバイブル」という本ですが、それぞれのVimユーザーにも勉強になります。私はぜひともVimユーザーに本書を購入してもらい、Vimの「カイゼン」に励んでもらいたいと考えています。この本に込められたテクニックの数々は、あのKanaさんの「Vimの流儀」並に有用であることでしょう。
るびきちさんによると、この本が好評ならEmacs Lispプログラミング本を出す予定があるようです。
これは期待ですね。みなさんもEmacsテクニックバイブルを購入して、るびきちさんの次回作を応援しましょう。

※1:現在のVim本にも同じ問題点があります。
Vim Hacksでその状況をある程度改善していますが。Vim Hacksが本になるときは、「Vimテクニックバイブル」になるかもしれません:-)

2010年7月24日土曜日

CygwinでcursesアプリケーションをコンパイルするときのTips

最近、vimshellのtexeをテストするためにCygwin環境を整えているんですが、Cygwinでcursesアプリケーションをコンパイルするときに少しはまったのでここにメモしておきます。

Cygwinにはlibtermcap.aは存在しません。-ltermcapすると失敗するので、-ltisと変更します。それでもエラーが出るときは、cursesライブラリをリンクしていない可能性があります。-lcursesをMakefileに付け加えましょう。

Cygwinのcurses.hは/usr/include/ncursesという変な場所にあります。「curses.hが見つからない」というエラーになるときは、gccの引数に-I/usr/include/ncursesを加えてみましょう。

これでようやくfdcloneとslをコンパイルできました。texeがこれらのアプリケーションを実行できるようにしないといけません。

2010年7月23日金曜日

vimshellの新機能 texeについて

以前のエントリ後、h1mesukeさんはConqueに乗り換えたようでした。

その後h1mesukeさんは、Conqueの設定記事を書いてくれたようです。
Conqueはまだまだマイナーなプラグインで、情報が少ないので大変に参考になります。

上記の記事のトラックバック代わりに、vimshellの新機能であるtexeについて解説をします。
texeとはConqueと同様に、Vimを端末エミュレータとして使うというコマンドです。
vimshellバッファ上で、

texe zsh

のようにして起動しますが、vimshellバッファが欲しくないときには:VimShellTerminal zshとしても起動することができます。

texeと似たvimshellのコマンドとして、iexeというものがあります。こちらは対話的にバッファを生成し通信するのですが、texeとは細かい動作が異なります。
iexeはneocomplcacheと連携して補完ができたり、ヒストリを参照して実行できたりと、Vimの機能をほぼフルに使うことができます。しかし、texeの場合はバッファに対するすべての入力が奪われてしまうので、neocomplcacheは使えません。補完は起動するソフトの機能に依存します。そのあたりはConqueも同じです。加えてtexeはエスケープシーケンスの処理が重いので、私はインタプリタを起動するときにはiexeを使うことをおすすめします。ただし、zshの右プロンプトはiexeでは動作しません。どうしても右プロンプトを使いたいなら、texeを使用する必要があります。
iexeの方が優れているというのに、わざわざtexeを作った理由は、フル機能の端末が必要なニーズは確実に存在するためです。例えば、gdbtuiというものがあります。これは端末上でグラフィカルにデバッグを行うことができるソフトです。こういうものはiexe上では実行ができません。VimではEmacsのようなGDBとの連携がしづらいのですが、gdbtuiのようなソフトを使えば模倣できると考えました。端末エミュレータの機能を実装すれば、muttやw3mといったメールやWebブラウズもVimだけで実行できるということもあります。端末エミュレータの実装はそれなりに大変ですが、端末機能を使うすべてのプログラムとVimが連携できることを考えれば、実装する価値はあります。

Conqueとの比較


texeの良いところ


・vimshellと連携できる
・Conqueの対応していないエスケープシーケンスに対応
・Windows対応
・+pythonが必要ない
・洗練されたハイライト
・プロセスの後始末
・キーマッピングを自由に設定が可能
Conqueの対応していないエスケープシーケンスとは、例えばタイトルやカーソル形状の変更のエスケープシーケンスや、Line Drawing Character setのエミュレーションです。Conqueのハイライト設定は、実はvimshellのものを流用しています。が、vimshellのハイライトはその後独自に進化したので、当然texeの方が優れています。Windowsに対応するには、Cygwinのインストールとfakecygptyが必要です。動作もかなり重く、zshの自動補完を使うにはかなり無理があります。zshを普通に使う分には問題がありません。

texeの悪いところ


・エスケープシーケンスの実装はまだ不完全
・Conqueより重い?

まだ開発したばかりなので、動作速度やエスケープシーケンスの対応については、なかなか厳しかったりします。ようやく一通りの機能を実装することはできたので、今後改善予定です。

設定について


texeはfiletypeをterm-コマンド名として設定するので、
autocmd term-*で設定します。例えばこのように:


autocmd MyAutoCmd FileType term-* call s:terminal_settings()
function! s:terminal_settings()
inoremap <buffer><expr> <Plug>(vimshell_term_send_semicolon) vimshell#term_mappings#send_key(';')
inoremap <buffer><expr> j<Space> vimshell#term_mappings#send_key('j')
"inoremap <silent><buffer><expr> <Up> vimshell#term_mappings#send_keys("\<ESC>[A")

" Sticky key.
imap <buffer><expr> ; <SID>texe_sticky_func()

" Escape key.
iunmap <buffer> <ESC><ESC>
imap <buffer> <ESC> <Plug>(vimshell_term_send_escape)
endfunction

vimshell#term_mappings#send_key()という関数は、起動しているプログラムに送るキーシーケンスを制御しています。複数のキーシーケンスを送る場合はvimshell#term_mappings#send_keys()を使います。
ヘルパ関数が用意されているので、キーマッピングも自由自在なのです。
設定さえしてやればスティッキーシフトに対応することもできます。この柔軟性は大きな魅力です。

おわりに


texeには、まだVT100レベルの端末機能しか実装されていませんが、いずれは$TERMがxterm-256colorになる予定です。今後に期待してください。

2010年7月14日水曜日

neocomplcache Ver.5.1開発中

また期間が空いてしまいました……。Vim Hacksもあるので、ブログを続けるのはなかなか難しいですね。
まぁ、こちらにはこちらの良さがあるので、ブログをやめることは多分やりません。
しかしこんな濃いブログを見てる人なんているのだろうか。

本題です。私はvimshellの開発やeskkの修正で忙しかったりするのですが、neocomplcacheのバージョンアップも密かに進めています。それがneocomplcache Ver.5.1です。
http://github.com/Shougo/neocomplcache/tree/master

見ための変化はあまりないですが、プラグインの仕様がかなり変化しています。

ファイル名補完


vimshellとの連携


オムニ補完


Vimオムニ補完


レジスタ補完


クイックマッチ


neocomplcacheでは、「あまりユーザーがプラグインを書いてくれない」ということが大きな障害となっていました。
neocomplcache Ver.5.1はプラグインが書き易くなっているので、今度こそプラグイン製作者が増えるのではないかと期待しています。あとはドキュメントさえあれば完璧です。このあたりはVim Hacksでフォローする予定です。

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が使えます。

2010年5月9日日曜日

第四回 カーネル/VM探検隊

参加・LTしてきたのでまとめを書いておきます。

会場に到着したのは12:20頃。割とはやめ。会場はなかなか広かった。

1.kozosさんの発表
組み込みOSを作ったよ! という話。今度本が出るみたい。
ちょっと興味ある。

2.yojiroさんの発表
OpenBSDのYUREXドライバはどのように解析したのか、おまけとして
「かわいくない」温度センサの解析秘話つき。
この人の発表は面白すぎました。あまたの名言が飛び出す。
「ドライバの気持ちは分かってた」
3時間でデバイスドライバをハック、すごい!

3.kobaさんの発表
組み込みの人らしいです。クロスコンパイル環境をqemuでごにょごにょしてたという話。

4.honmaさんの発表
ついにYUREXの話キター!
今日のハイライト。貧乏揺すりを科学したYUREX。CMが放送されたこともあるらしい。
一生のうちに貧乏揺すりをする回数をまじめに計算=>10桁あれば大丈夫だろう。
検証する動画がシュール。お値段は¥12,600(これでも採算ギリギリ)でしたが、
時代を先取りしすぎて(売れなかったので)¥980に値下げ。まさかの92% OFF!
YUREXのサイトがある。まじめに解説しすぎてて吹く。
デバイスドライバはPython製。Windows 7専用ドライバもある。
秘密の在庫がまさかのワンコイン。即売会は争奪戦でした。
何が彼らを熱くさせたのか……。どうしてこうなった!

休憩を挟み、ここからLTになった。
5.go_vmさんの発表
Plan9で動くYUREXのドライバを書いた!という話。
各OSでYUREXのドライバを書くというのが前回のカーネル/VM探検隊後にはやったらしい。
3月終わりのHacathonにて実装。Plan9のUSBドライバはユーザー空間で動作する。
USBデバイスはファイルとして見える。おお、確かに動いている。
時間がないので続きはWebで。github上で公開しているらしい。

6.noztosさんの発表
NetBSDとYUREXの話。5秒に一回ポーリング。Twitterに投稿できるらしい。

7.syuu1228さんの発表
OpenBSDにsgi SMPを実装。Theoさん直々にマシンを買わされた。
共有メモリアーキテクチャでクラスタを構成できる、ごく普通のHPC。
いわゆる変形合体ロボ。プロセッサローカルな空間があり、ローカルなIOとリモートのIOがある。
OpenBSDが持っているのは全部で四台らしいので、「もう一台送られてくるかも?」と言っていた。
質問にて、「sgi SMPをどこに送ればいいんですか?」に吹く。

8.xylaoさんの発表
UNIX/32Vをエミュレータで動かす。マイクロコードを修正した話。
すごく……CPUです。いや私は大好物なんですけど。
VAXのマイクロコードを解説。あれ、これは何の勉強会だったっけ。

9.masami256さんの発表
デバイスドライバを作ろう!とInterface別冊で勉強していた。
「使い方を説明するので誰か実装して」に吹く。

10.siritoriさんの発表
高校生の発表。H8SXマイコン上で動作するOSを作ろうという話。
スライドでまさかのハプニング。卒業研究らしい。
そこにH8SXマイコンがあったから。
OSはまだ書けてないようだ。逆質問を受け付けていた。

11.oza_x86さんの発表
会場に来れなかったらしく、Skypeで参加。
Dynamick tikcsはお仕事があるときだけタイマー割り込み。
利点は消費電力の低減とゲストOS時にCPU使用率の低下。
社会人になるというイベントがあったので4月はあまり実装できず。26日からやる。
27日にパッチを投げる。実際にテストしてもらえることになり、ToDoが増えた。
FreeBSD 7.Xで試せるようになった。パッチとソースはgithub上にあるらしい。
今後はFreeBSD 8.1めがけてマージしたいとのこと。

12.yumano・murahueさんの発表
韓国のハッキングコンテストに参加。ハッキングコンテストの話はそこそこに、韓国話。
韓国で見つけたらしい「Kimchi and IT」に吹く。
fizzbuzbizbuz
韓国にはIT女子が多い。彼女たちはみんなバイナリアン。韓国は楽園!
バイナリアンかっこいい。

13.ucqさんの発表
バイナリエディタで始めるプログラミング入門。タイトルはネタ。
Twitterでつぶやいてたら採用されたらしい。
「とりあえず、実行ファイルをバイナリエディタONLYで書きます」
実行ファイルの形式は、PE, ELF, COM, Mach-O, a.out, ....
そうだ、Plan9でいこう! 吹いた。
Plan9はフォーマットがシンプル。
ライブコーディングでバイナリエディタを使うプログラミング。これは斬新だ。胸が熱くなるな。
ヘッダの後に実行位置を書く。「ハンドアセンブルは面倒なのでNASMで」ですよねー。
デモは失敗……。残骸のコードが残ってしまっていたらしい。

14.shudoさんの発表
いまどきのBinary Hacks 後編
Binary Hacksは大好評だったらしい。
Web系バイナリアン。かっこいい。
NerrymoserをデコードするためにLinux用のflv2mp3を利用することに。音声デバイスの出力を横取り。
「Segmentation Faultはお友達」
libX11.soで落ちてる。
バイナリエディタで書き換えたら動いた→さすがにこれはまずい。
GDB使ってブレークポイントを設定。
ioctlを呼んでスタックポインタがずれる。
よくよく眺めるためにlibcを逆アセンブル。
独自のioctlを使っているらしい。
処理を追うと末尾でなぜかジャンプ。この処理が悪さをしているらしい。
実行後にスタックポインタを補正して解決。
「binutilsはお友達」
みんなご愛用のバイナリエディタ。shudoさんはEmacsのhexl-modeを使っていた。

15.d_kamiさんの発表
Javaでx86エミュレータを作った話。
OS作ったのでいろいろ知っていたが、命令コードのデコード方法は知らなかった。
ブログで宣言、Twitterで自分を追い込む。
アセンブリ言語のコードを実行できるようにする。
知らない命令を少しずつ実装中。現状は手抜きでプロテクトできてません!

16.takahashiさんの発表
KVMをWindowsに移植した話。エミュレーションの処理が遅いようだ。
もうちょっと詳しく聞きたかった……。

17.自分の発表 Vim = VM
VimはVMであると主張するいたって真面目なプレゼンだったはずなのに、
どうしてこうなった! いろいろキワモノあつかいされました。反省はしていない。
詳細は発表資料を見てください。本当ならvimshellのデモをするはずだったのですが、一番最初に若干トラブったのとうまく画面切り替えできなかったので時間切れとなりました。

質問:Plan9でvimshellは動きますか?
答え:誰かが対応してくれれば……。私はLinux/Windows環境しかないので検証できません。
Macに対しても同じスタンス。ちなみに、Plan9にもVimはあるらしい。

質問:Emacs上でVimを動かせばいいのでは?
答え:エミュレーションにはあまり期待していない。それよりも、Emacsの優れた機能をVimに移植したい。

18,19:
もっと話を聞きたかったのですが、発表が終わった後で忙しくて話を聞けず……。

ベストオブLT(自分の中で):
1.shudoさん
2.yojiroさん
3.oza_x86さん
4.ucqさん
5.syuu1228さん
みんなネタが濃い……。

全体に関する感想:
BSDとPlan9が大人気過ぎて吹く。なければ自分で(ドライバを)書くというその姿勢は見習いたい。
BSD系は比較的日本人コミッタが多いよね。なぜだろう?
自分の好きなOSを改造できるっていいな。
Vim = VMはもっと煮詰めれば真面目な研究課題として成り立つような気がする。
Vimからデバイスをいじれれば面白いですよね。真剣に検討しておこう。

ちなみに、力尽きたので懇親会には参加できませんでした。
何か質問があれば直接メール or github Issue or Twitterなどで。

2010年3月27日土曜日

RSenseをneocomplcacheで使用するには?

m2ymさんが作成したRSenseは、まだ未完成ですが優れた型推論機能で便利です。
しかし、Vimには一応対応しているもののcompletefuncを書き換えてしまうため、
neocomplcacheと併用すると問題が発生します。
私がneocomplcacheと相性が良くなるように書き換えたので、
etc/rsense.vimを置き換えてください。
http://github.com/Shougo/rsense

追記:Ver.0.3で私のパッチが取り込まれ、neocomplcacheに対応しました!

その上で、次のような設定をすれば一応動作します。
g:rsenseHomeはRSenseをインストールしたディレクトリを指定してください。
let g:rsenseHome = 'c:/rsense-0.3'
let g:rsenseUseOmniFunc = 1

if !exists('g:neocomplcache_omni_patterns')
let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'

使用例はこのようになります。RSenseサーバーの応答速度が遅いので、
補完は若干もたつきます。注意してください。

2010年2月24日水曜日

諸君 私は補完が好きだ

諸君 私は補完が好きだ
諸君 私は補完が好きだ
諸君 私は補完が大好きだ

手動補完が好きだ
自動補完が好きだ
インテリセンスが好きだ
スペルチェックが好きだ
シェルが好きだ
予測補完が好きだ
オムニ補完が好きだ

Vimで Emacsで 秀丸で
zshで bashで
ATOKで skkで GoogleIMEで
携帯で スマートフォンで
Visual Studioで Eclipseで

このプログラム上で行われる ありとあらゆる補完作業が大好きだ

Vimがバッファからキーワード補完を行うのが好きだ
zshがコマンドの引数を予想して適切な候補を提示した時など心がおどる

ATOKが間違った日本語を訂正するのが好きだ
複雑なテンプレートを使用したC++のコードを
Visual Studioのインテリセンスで補完したときなど胸がすくような気持ちだった

zshが補完の世界を蹂躙するのが好きだ
補完を知らない初心者がシェルの引数をちまちまと入力している様など感動すら覚える
履歴補完をしらない輩を<C-r>で吊るし上げていく様などはもうたまらない

泣き叫ぶバグ入りのコードが私の這い回る<TAB>の指さばきとともに
補完によってあっというまに正常に書き換えられるのも最高だ

統合開発環境に目茶苦茶にされるのが好きだ
必死に守るはずだったエディタとシェルの牙城が蹂躙され
元祖のキーバインドがWindowsライクに変更されていく様はとても悲しいものだ

anything.elの物量に押し潰されて殲滅されるのが好きだ
VimとEmacsの宗教論争に追い回され、統合開発環境にその主導権を奪われるのは屈辱の極みだ

諸君 私は補完を 最強の補完を望んでいる
諸君 私に付き従うエディタユーザー諸君
君達は一体何を望んでいる?

完全なるオムニ補完を望むか?
情け容赦のない糞の様なスペル訂正を望むか?
肥大化の限りを尽くし数多のエディタを葬る悪魔の様な統合開発環境を望むか?

zsh: <TAB>!!
Emacs: <TAB>!!
Vim: <TAB>!!

よろしい ならば補完だ

我々は渾身の力をこめて今まさに<TAB>キーを押し下げんとする左手小指だ
だがこの黒い画面の上で四半世紀もの間堪え続けて来た我々に
<TAB>の打鍵すらもはや必要ない!!

更なる補完を!!
最強の自動補完を!!

我らはエディタと補完をこよなく愛する一派に過ぎない
だが諸君は一騎当千の古強者だと私は信仰している
ならば我らは諸君と私で究極の自動補完プラグインneocomplcacheとなる

我々を忘却の彼方へと追いやり眠りこけている連中を叩き起こそう
髪の毛をつかんで引きずり降ろし眼を開けさせ思い出させよう

連中にCUIの世界を思い出させてやる
連中に我々の<TAB>キーの打鍵音を思い出させてやる

自動補完には奴らの哲学では思いもよらない世界が広がっている事を知らしめてやる
一千人のVimの戦闘団でソースコードを書き換え尽くしてやる

「neocomplcacheインストール開始」
「:NeoComplCacheEnable!」
「最後のVimユーザーより全エディタユーザーへ」

第二次 自動補完作戦 状況を開始せよ
征くぞ 諸君


ついカッとなってやった。反省はしていない。

※:ご好評にお応えして、追記しました。

2010年1月7日木曜日

vimプラグインストーリー「Shougoの受難」

──アタシの名前はショウゴ。心に傷を負ったビム使い。モテカワスリムで補完体質の愛されガール♪
アタシがつるんでる友達は補完をやってるネコ、ビムにナイショで
非同期しているビムプロック。訳あって一から実装されたビムシェル
 友達がいてもやっぱり学校はタイクツ。今日もネコとちょっとしたことで口喧嘩になった。
ビム使い同士だとこんなこともあるからストレスが溜まるよね☆そんな時アタシは一人でギットハブを歩くことにしている。
がんばった自分へのご褒美ってやつ?自分らしさの演出とも言うかな!
 「あームカツク」・・。そんなことをつぶやきながらしつこいプラギンを軽くあしらう。
「カノジョー、ちょっとsystem()させてくれない?」どいつもこいつも同じようなDOS窓付きのコードしかない。
イーマックスはシェルも動いてカッコイイけどなんか薄っぺらくてキライだ。もっと等身大のアタシを見て欲しい。
 「すいません・・。」・・・またか、とセレブなアタシは思った。シカトするつもりだったけど、
チラっと開発者の男の顔を見た。
「・・!!」
 ・・・チガウ・・・今までのコードとはなにかが決定的に違う。スピリチュアルな感覚がアタシのビムを
駆け巡った・・。「・・(カッコイイ・・!!・・これって運命・・?)」
男はBramだった。連れていかれてハックされた。「キャーやめて!」今までやっていなかったパッチをきめた。
「ガシッ!ボカッ!」アタシはSEGVした。キャッシュ(笑)

注:
元ネタ http://love6.2ch.net/test/read.cgi/book/1191676700/45
これはujihisa氏が作成したものを私が修正したものです。
この作品はフィクションです。どこかで見たようなフレーズがあったとしても、実在の人物とは全く関係がありません。