ラベル vimshell の投稿を表示しています。 すべての投稿を表示
ラベル vimshell の投稿を表示しています。 すべての投稿を表示

2011年12月3日土曜日

Vimと過ごすイチャラブクリスマス ~そして伝説へ~


Vim Advent Calendar 3日目:「Vimと過ごすイチャラブクリスマス ~そして伝説へ~」

Vim Advent Calendarと聞いて、何も考えずにエントリーしてしまったShougoです。こんにちは。
特に反省していない。早くも盛り上がりを見せているVim Advent Calendarですが、
私もそれらに負けない濃いネタを提供したいと考えています。

注意:このエントリには過激な表現が多数含まれています。
ネタをネタと分かる大人な人間だけが、このエントリを理解できることでしょう。

もう12月となりクリスマスが近付いてきましたが、Vimmerの皆さんはいかがお過ごしでしょうか。
クリスマスの予定はもう決まりましたか。まだ決まっていない?
ならば、今年の冬はVimと一緒のクリスマスというのはどうでしょうか。
クリスマスは普段はできないVimとの愛を深める良い機会です。
幸い、Vimとのデートにはお金がかかりません。PCからVimを起動するだけでよいのです。
ノートPCさえあれば、どこでもVimとイチャイチャし放題です。
筆者オススメのデートコースは以下の通りです。

 1:Vimの設定を見直してみる

長い間Vimを使用していると、不要になった設定が貯まってくることでしょう。
大晦日にやっても良いのですが、大晦日はVimとの新居(PC)の掃除で忙しいはず。
この機会に、Vimの設定を見直しましょう。汚ない設定では、Vimから嫌われてしまいますよ。
デート前には身だしなみを整えるのも大事ですよね。
おそらく、皆さんのVimの設定には、他の人からのコピペが多数含まれているはず。
それは良くないですね。コピペは「だめゼッタイ!」です。
訳が分かる設定だけを導入しましょう。
分からないコマンドや分からない設定については、まず:helpを参照しましょう。
Vimの知識を増やすチャンスです。
ちなみに:helpを参照するときは、一覧を表示できるunite-helpを用いるのがオススメです。

2:Vimのプラグインを見直してみる

同様に、不要になったプラグインも見直しましょう。
プラグインの管理には、pathogen.vimやvundle.vim, neobundle.vimといった
プラグイン管理プラグインを使用すると楽です。
この機会に導入しておくと良いでしょう。
筆者のオススメは、neobundle.vimを使用することです。
vundle.vimがもつほとんどの機能に加え、unite.vimと連携してプラグインをインストールしたり削除できます。
neobundle.vimのおかげで彼女(Vim)との仲が深まりました!」など嬉しい報告が続々届いています(妄想)。

3:Vimと過ごす時間を最大化する

Vimとラブラブになるためには、できるだけVimと過ごす時間を取らなければいけません。
仕事でだけVimと過ごすというのは勿体無いです。
我々は仕事でも趣味でもVimと一緒に過ごすことができる幸運に恵まれているのですから。
いつでもVimと過ごすために、vimfilerやvimshellをインストールしましょう。
Explorerやzsh, screenといった軟弱なツールは窓からポイしてください。
さらに、unite.vimやneocomplcacheをインストールすることで、より濃密なVimとの時間を堪能することができます。

これらのプラグインはVim pluginで拡張することができ、Vim scriptで設定を行います。
Vimを愛する人達には無くてはならないものです。
Vimに慣れていない人には使いこなすのは難しいですが、
Vimへの愛があれば、それくらいの障害は乗り越えられることでしょう。
えっ、Vim scriptが分からない? それはなんてこと。

Vim scriptはVimとのコミュニケーションを図るために無くてはならないスキルです。
英語なんて学んでいる暇があったらVim scriptを勉強するべき。
だいたいなぜVim scriptプログラマの求人やVim scriptを書くだけのお仕事はないんだ。
私はC言語ではなくVim scriptで全てのコードが書きたい。
Vim scriptを書いていると心が落ちつく。Vim script最高!
おっと、イカンイカン。つい本音が出てしまいました。

4:VimのプラグインをDIYする

クリスマスこそ、Vim scriptを勉強してVimと一緒にプラグインを作成しましょう。
愛するVimとの共同作業です。
最初から難しい課題に取り組むのは大変なので、最初はプラグインの改造をしたり、
ftpluginやちょっとしたプラグインを作成すると良いでしょう。
.vimrcに書いた設定を汎用的にしてプラグイン化するのも良い方法です。
例えばthincaさんはそういう方法でプラグイン化するのをよくやっているようです。
最近では、unite.vimのsourceを作成するのが流行しているため、それをやってみるという手があります。
ちなみに、neocomplcacheを使うと簡単にVim scriptを書くことができます。
neocomplcacheはVim scriptを書くプログラマのために最適化されているからです。
他の言語にも対応していますが、それはオマケです。

5:Vimコミュニティに参加する

Vimとの仲がかなり深まったと思ったあなた、しかしそのうち関係がマンネリ化してしまうからもしれません。
それを防ぐために、Vimコミュニティに参加してみましょう。
いわゆる、町内会や保護者会みたいなものだと思ってください。
周囲にVimmerがいなくて寂しい思いをしているそこのアナタ、ぜひとも参加するべきです。
他人がどのようにVimと良好な関係を続けているかを観察することで、あなたのVimにとても良い影響を与えるはずです。
vim-users.jpやvim-jpでは、あなたの参加をいつでもお待ちしています。
もちろん、Vimに貢献したいというメンバーも随時募集中です。
私はvim-users.jpに育てられてVim scriptを書くようになったので、もっと仲間が増えるといいなと思っています。

6:おわりに

Vimとのデートを楽しんだ後は、Vimへの愛を囁きながら眠りに付きましょう。
心配しなくても、Vimはいつもあなたと一緒に居ます。Vimとは心でも繋っているのです。
大事なことは、クリスマス終了後もVimとの愛を深めていくことです。
クリスマスは切っ掛けにすぎません。
これを実践して、皆さんがよりVimを愛するようになれば幸いです。
もちろん、Vimと一緒に新年を向かえるのも非常に良い心掛けではないかと思います。

えっ、この記事は単に自分のプラグインの宣伝をしているだけじゃないかって?
私は純粋にVimとの過ごし方を解説しているだけだというのに、何て失礼な!

2011年9月26日月曜日

Yokohama.vim #2の感想

先日、Yokohama.vim #2に参加しました。
メモを取っていないので、記憶が曖昧ですが、とりあえず感想などについて述べておこうかと思います。

自己紹介


とりあえず、テーブルごとに自己紹介をしました。Vimの経験については10年くらい使っている人、つい最近使い始めた人と様々でした。
やはりというべきか、あまりVim力の高い人はいなかったです。
「Vim歴が長いと今の環境に満足してしまう」そうです。これがいわゆるVim世代間格差というものなのでしょうか。

「キーマッピングを考える」


tsukkeeさんの発表です。Vimを用いたプレゼンはVim使いとしてありがたいところです。
「ESCキーを楽に入力するにはどうするか?」というコンセプトで、
ベーシックなマッピングから、submodeやarpeggioの紹介もあり、思っていたより濃い解説でした。
なぜか途中で私のマッピング紹介が……。

「Shougoとフリートーク。Vimテクニックバイブルの裏話も聞けるかも?」


会場には、Vimテクニックバイブルを持っている人が半分くらいいました。
しかし、届いたばかりでまだ読んでいないようだったので、適当に質問に答えることに。
覚えている回答でいうと、

質問:「開発速度の秘密は?」
答え:「Twitterやブログを監視しているから。バグならその日のうちに直す。早いときは5分で直す」

質問:「Cを編集するのにオススメのプラグインは?」
答え:「ctagsでタグを作って、タグジャンプ、neocomplcacheを使う、くらいしかやっていない。それでもかなり十分だったりする。タグジャンプなら、unite-tagとかある」

質問:「Vimの正規表現に慣れません」
答え:「それはVim scriptを書いていないから。毎日書いていれば慣れる。Vimの正規表現は特殊なわけではない。世界が違うだけ」

そして、時間があったのでvimfiler Ver.3の紹介とか。unite.vim Ver.3による実装の説明をしたあと、簡単にデモをしました。
その後、vimshell Ver.9の新機能の紹介としてirbをvimshellバッファで実行するデモを行い時間切れ。

秋を楽しむ【スポーツの秋・読書の秋・行楽の秋】


本屋さんにVimテクニックバイブルを購入するイベントでした。私もついでに見に行きました。
自分の本が並んでいるのを見るのは初めての経験でしたね。購入してくださった皆さんありがとうございます。


私たちがバイブルから選ぶ5つの技


Vimテクニックバイブルをテーブル毎に読んでしゃべって、150の技の中から気に入った技を選んで紹介しようというセッションです。
なぜか発表形式でしたが、新鮮でした。意外と、地味なテクニックが人気でしたね。
私の班は私のVim話を延々と語っていたり、「ライブ修正しました」イベントをやったり、いつもの調子でした。

Shougoサイン会


Vimテクニックバイブルを持っている人の希望者に、約束通りサインをしました。
サインする言葉は、サインしてもらう人が好きなものを選ぶ方式。
「修正しました」サインが5人〜7人くらいで多かったですね。よほどインパクトが強かったのだろうか。
他には、「またMacVimか」や「僕と契約してVim使いになってよ!」とか「:Necoのアイコン」とかいろいろです。
なぜか握手を求める人まで。どうしてこうなった。
ちなみに、thincaさんやtaku_oさんにサインを求めたけれどことごとく失敗。
Vimmerはシャイですが、(私を除く)Vimテクニックバイブルの著者までシャイであることが明らかになりました。
わ、私はまだ諦めていないんだからね!

懇親会


tsukkeeさんの機能を取り込み、neobundle.vimにSubversion/Mercurial対応を追加しました。
他にはVimの開発体制の話とか、Vimへの愛を語ったりとか、いろいろ。

感想


さすがに三回目となるともう慣れたものですが、発表者がもっと居ると良かったなーと思います。
「次回発表したい」という人もいたので、それは期待できると思われます。
今回は参加者に女性が居たのがオドロキでした。(ujihisa.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環境のことを全く考えていないのはどうなのかな……。

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年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などで。

2009年11月23日月曜日

vimshellのToDo

最近更新が滞りがちなvimshellですが、一応今後やることは決まってます。
忘れないうちにここに書いておこうと思います。
neocomplcacheもそうですが、新たな問題が発生して、全然ToDoが進まない今日この頃。
機能的には改善しているのが救いです。

・グロブがマッチしない場合、zshのように、現在エラーになる。Bashのように空にするべき?

・構文解析パーザを書き直し。Lexical analyzerとparserを書いて、分離して……。というVimScriptでは考えられないことをやらないといけないかも。

コマンドのインテリジェントな補完システム。
内部コマンドの補完は自分で作らないと。外部コマンドはzshを呼び出せるようにする。
->現在実装中。実装完了するにはかなり時間がかかりそう。
->Ver.6.00で実装しました! zsh_completeはまだです。

・zshのzptyのように、端末入出力を自動化する内部コマンドの追加。
どうせ似たようなことをやっている。

・zargsを移植? 拡張ブログの内容をファイルに書き出し、xargsに渡す。

・履歴に登録しないコマンドパターンを定義するオプションの追加
g:VimShell_IgnoreHistoryPattern

openコマンドは環境をきちんと判定するように。
-> Ver.6.03で実装中。

, , はプロンプトを削除しないように置き換える。

・ENV=value cmdの実装。
(local ENV=value; cmd)というようなコマンドが解釈できると良いな。

・`=$hoge`とすると、変数を置換してからevalするように。

・'や"は行をまたいでも認識するように。

・制御構文の実装。多分一番難しい。

・time内部コマンド コマンドの実行時間を計測する。
reltime()を使って実装。コマンド列を評価せずに一つにまとめる構文が欲しい。

・cat, more(less)内部コマンドの実装。内部コマンドも標準入力を解釈する。

・vimshellバッファを初期化する際に、setlocal nopasteしておく。
他のオプションもftplugin/vimshell.vimで設定。
->ftplugin/vimshell.vimは廃止予定。
->ver.6.00で廃止しました。

・別バッファのvimshellのカレントディレクトリに移動するcdd内部コマンドを追加する。
cdd add, cdd delでディレクトリを追加・削除する。
->別バッファのディレクトリに移動するbcd内部コマンドを追加した。これは便利。まだ補完は出来ない。
->補完も実装しました!

・hoge && fugaはfishみたいにhoge; and fugaとしたい。

なぜかWindowsではコマンドの終了ステータスがうまく取れない。
->vimprocのバグだったので修正。

・topのようにコマンドを実行するtoplessを移植。

s:error_bufferやs:print_bufferは廃止して、vimshell.vimに一本化する。
interactive.vimはautoload/vimshell/interactive.vimに移動。

->Ver.6.00で実装。

・ドキュメントの充実
実はここが一番重要だったり。自分が気の向くままに実装した内部コマンドの数々は、
さすがにマニュアル書かないと気付いてもらえないこと間違いなし。
作者でさえ、時々仕様を忘れます。

2009年7月23日木曜日

vimshell != VIM-Shell

vimshellと紛らわしいプロジェクトにVIM-Shellというものがあります。これは「Vimのなかでシェルを動かそう!」というコンセプトで、Emacsでいうと、M-x shellやM-x ansi-termと似たようなものです。
これはこれで有用だと思いますが、シェルが設定されていないと動作しない上、使うシェルに依存した処理が多くなってしまいます。私がvimshellで目指しているのは、EmacsでいうM-x eshellのように、「Vimの中で動作する新しいシェル」です。

vimshellは現在基本的な機能は実装することができました。
しかしzshやbashと比較すると、シェルとしての機能が不足していることは否めません。
www.vim.orgにも登録したいのですが、仕様もこれから変更されるでしょうし、まだ時間がかかりそうです。

vimshell Ver.5.26, neocomplcache Ver.2.63 Released!

最近忙しく、ブログの更新はおざなりになってました。
vimshellの開発は進んでいます。neocomplcacheの更新もやってますが、vimshellで使いやすくするために変更したものが多いです。

ざっと変更点を挙げておきます。

vimshell Ver.5.26
・g:VimShellEnableInteractive=0でないと、プログラムの実行がエラーになるバグを修正
・iexeで補完ができるようになった
・iexe &でヒストリを参照できるようになった
・iexe &で<C-t>を押すことにより、プログラムの補完を呼び出せるようになった。
・バックグラウンド実行したプロセスのバッファにfiletypeを設定、neocomplcacheで補完できるようになった。
・vimshellバッファのシンタックスハイライトを改善した

neocomplcache Ver.2.63
・ERBのスニペットを改善した
・vimshellでのキーワードパターンを改善した
・Railsで使いやすいように、ERBはrubyのバッファからキーワードを参照できるようになった
・ファイル名補完の動作を改善、長いファイル名でも見やすくなった

Windowsユーザーでvimshellを使う場合、
cdのパスは/を使ってください。
\はエスケープシーケンスになっているので使えません。

2009年7月8日水曜日

vimshell Ver.5.22 Released!

vimshell Ver.5.22をリリースしました。
今回の新機能はsudo内部コマンドです。
管理者権限が必要なコマンドも、
sudo cp -R hogehoge piyopiyoという感じで扱えます。
ファイルを管理者権限で編集したいときは、
sudo vim hogehoge
です。ただしsudo.vimが必要です。
このコマンドは現在Linuxでのみ動作します。
Macには今度対応する予定です。

その他の新機能:
・<C-]>にて、前のコマンドの引数を入力できるようになりました。
・run-helpを実装。<C-r>hでmanを引けます。
・iexeやbgの動作が改善されました。
・aliasがうまく定義されないバグを修正しました。

vimprocも更新しました!
splhackさんの協力により、Mac OS Xに正式対応。

makeするときは、make -f make_mac.mak
とコマンドを叩いてください。

2009年7月1日水曜日

エスケープシーケンス対応作業中

vimshell Ver.5.18にて、ようやくパイプ処理が実装できました。

現在はエスケープシーケンスに対応するべく、開発中です。



GVimでやっと256色表示に対応しました。ターミナルではまだ試してません。


オリジナルだとこのような表示になっています。見比べてみてください。

2009年6月23日火曜日

最近のvimshellに追加された機能

ブログにはあまり更新点を書いてなかったので、
今の機会にまとめて書いておきます。

vimshell Ver.5.14-Ver.5.16に追加された機能:
・``と`=`が実装されました。``はsystem()の結果を評価し、`=`はVimScriptの式をeval()した結果を返します。
・引数先頭の~がホームディレクトリに置き換えられるようになりました。ただし、ホームディレクトリへのパスに空白が含まれると、多分動作がおかしくなります。
・システム変数を実装。$$systemにはコマンドの終了ステータスが格納されます。shとは互換性がありません。
・ATOK X3環境でも動くようにしました。
・エラー表示を改良しました。g:VimShell_EnableInteractive=1ならば、コマンドのエラーもハイライトされます。
・>, >&, < といった入出力のリダイレクションを実装。内部コマンドにも有効です。
・/dev/nullを実装。まだ出力にしか使えません。
・special commandを実装。引数はVimScriptとして評価されます。
・変数に代入するletと、引数をVimScriptとして評価・出力するevを実装。
・echo内部コマンドを実装。
・ワイルドカードを実装。*と?のみ使えます。
・Windows環境でもワンライナーが使えるようになりました。ただし、g:VimShell_EnableInteractive=1の時のみです。
・コマンド検索ルーチンを改良しました。
・コマンド補完を改良しました。内部コマンドも補完できます。
・g:VimShell_ExecuteFileListが"bg firefox"のように複合コマンドを指定できるようになりました。

2009年6月18日木曜日

リダイレクションを実装中。

現在、vimshellのリダイレクションを実装中です。
開発中の画面はこんな感じ。

2009年6月15日月曜日

neocomplcache Ver.2.60 vimshell Ver.5.14

neocomplcacheを久しぶりにバージョンアップしました。
http://github.com/Shougo/neocomplcache/tree/v2.60
キャッシュされた補完候補が削除されてしまう深刻なバグが修正されているので、アップデートするべきです。結構前からこのバグは存在していたはずですが、なぜ今まで気づかなかったのだろう……。ついでにファイル名補完も見やすくなっています。

vimshell Ver.5.14をリリースしました。
ただし、まだリダイレクションは実装されていないので、人柱になりたい人のみ使ってみてください。
http://github.com/Shougo/vimshell/tree/v5.14
Insert modeでを押したときに使えるコマンド補完がかなり進化していて、
内部コマンドやエイリアス、外部コマンドが補完できます。
もちろん非同期実行を有効にすれば、Windowsでワンライナーの世界を堪能できます。

2009年6月11日木曜日

vimshell 開発順調です。

現在このブログの更新がかなり滞っていますが、vimshellの開発は続いています。
特に私が毎日のように使用することとなったので、これからどんどん機能が追加されていくことでしょう。

今開発中のvimshellはこんな感じ。Windowsでもワンライナーができるようになりました。
クオートやワイルドカードを解釈するようになりました。
リダイレクションが実装されれば、開発版としてgithubに上げる予定です。

2009年5月25日月曜日

neocomplcacheとvimshellの更新

neocomplcacheとvimshellが同時にバージョンアップしました。
http://github.com/Shougo/neocomplcache/tree/v2.56
http://github.com/Shougo/vimshell/tree/v5.11

neocomplcacheの改良点はファイル名補完を自前実装したことです。
詳しくはpresenを参照して欲しいのですが、Quick Matchや-によるワイルドカードが動作します。しかも、ちらつきません。
もとはというと、vimshellで自動補完するために実装しました。



vimshellの改良点は、presenを修正したのと、iexeコマンドや&によるバックグラウンド実行に対応したことです。まだ不安定ですが、"iexe irb&"のようにして実行することで、インタプリタをVim内で動作させることが出来ます。
この新機能を使用するには、proc.dll(Windowsの場合。vimprocに付属)もしくはproc.so(MacやLinuxの場合。vimprocのソースをコンパイルする必要があります)をautoloadディレクトリにインストールしておく必要があります。
ちなみに、neocomplcacheの新しいファイル名補完にも対応しました。neocomplcacheを有効化していれば、でファイル名補完が呼び出せます。

それでは良いVim lifeをお過ごしください。
Happy Vimming!

2009年4月30日木曜日

vimprocを使ってみた

現在最高のシェル環境を目指してvimshellを作っているのだが、大きな問題として非同期実行が出来ないということがある。
他のプラグインでは、外部言語インタフェースを用いている。
しかしそれでは環境が限定されてしまう。
そこで、kanaさんより教えてもらい、vimprocというものを使ってみた。

内部でdllを呼び出しているらしく、Windowsではautoloadにコピーすることでそのまま使え、
*nixではコンパイルすれば使えるらしい。

testプログラムが動くことを確認したため、vimshellのiexe内部コマンドに実装してみた。
うまく動いている。

さて、あとはどう非同期に実行させようかな。
autocmdを使うべきだろうが、なかなか簡単にはいかない。