Vim = VM
自己紹介
   ハンドルネーム:Shougo
   Vim大好き
   CPUやOSの話も好きです
   職業:学生
   Vim歴:4年
   私の.vimrcは1576行あるぞ!(コメントを除く)
今日はVimの話をします。
なぜVimなのか?


  カーネル / VM探検隊
         ↓
  カーネル / VIM探検隊
         ↓
      Vim
自然な発想!
まじめな解説

         アプリケーション             アプリケーション



 アプリ                  アプリ
ケーション       VMM      ケーション


        ホストOS                ホストOS


    ハードウェア                ハードウェア


  Type II VMM       Vimmer's Environment
「Vimは環境」
   Vimはマルチプラットフォーム
   Vimさえあれば、その上で様々なアプリケーション
     が動作する
    例: テトリス,  Twitterクライアント, シェル,  端末
      辞書ビューワ, ファイラー
   よって、Vim = VMの式がなりたつ
Vimの低レベルレイヤー
   VimはVim Scriptで拡張が可能
   Vim ScriptはOS用語でいえばDevice Driver
   それでも実現不能な場合は外部ライブラリを用い
     るか、ソース本体にパッチを当てる
   ソースにパッチ = カーネルそのものを書き換え
   外部ライブラリ = カーネルモジュール
   各々で読み換えてください
Vimの通信機能
   全てをVimだけでやることは不可能なので、外部と
     の通信機能が必要
   Vmでいうところの、VM RPC (Remote Procedure 
     Call)
   VimはRuby, Tcl, Python, Perl等、外部言語のイン
     タフェースが充実している
   さらに、共有ライブラリも呼び出せる! これはEmacs
     では不可能
   ただし外部プログラムとの通信機能は弱い
Emacsとの比較
   Emacsはシェルと通信するための機能が充実して
     いる
    例: shell­mode, term­mode, eshell­mode, comint­
     mode...
   かたくなにエディタであろうとするVimには入る予
     定なし
vimproc
   なければ作ってしまえばいいじゃない! ということ
     で、Yukihiro Nakadairaさんの通信ライブラリを改
     造して使っています。
   pipe, pty, socketを用いた通信が可能
   vimshellと連携してコマンドのパースが可能
   github上で公開中
vimshell
   100 % Vim Scriptで書かれたシェル
   EmacsでいうところのEshell
   内部の通信ではvimprocを使っている
   neocomplcacheで自動補完
   将来的にはシェルスクリプトを書けるようにしたい
     ……
   github上で公開中
vimshell




今からデモをやります
おまけ
   そろそろVim Scriptに足りない機能が見えてきた。
     パッチを書くべきなのか……
   ちなみに、以前Vim Scriptでバイナリエディタを作ろ
     うとしたことがあります
    →途中で挫折
   時間があったら再挑戦したいです。目指せVimの
     hexl­mode!

Vim = VM

  • 1.
  • 2.
    自己紹介  ハンドルネーム:Shougo  Vim大好き  CPUやOSの話も好きです  職業:学生  Vim歴:4年  私の.vimrcは1576行あるぞ!(コメントを除く)
  • 3.
  • 4.
    なぜVimなのか? カーネル/ VM探検隊 ↓ カーネル / VIM探検隊 ↓ Vim 自然な発想!
  • 5.
    まじめな解説 アプリケーション アプリケーション アプリ アプリ ケーション VMM ケーション ホストOS ホストOS ハードウェア ハードウェア Type II VMM Vimmer's Environment
  • 6.
    「Vimは環境」  Vimはマルチプラットフォーム  Vimさえあれば、その上で様々なアプリケーション が動作する 例: テトリス,  Twitterクライアント, シェル,  端末 辞書ビューワ, ファイラー  よって、Vim = VMの式がなりたつ
  • 7.
    Vimの低レベルレイヤー  VimはVim Scriptで拡張が可能  Vim ScriptはOS用語でいえばDevice Driver  それでも実現不能な場合は外部ライブラリを用い るか、ソース本体にパッチを当てる  ソースにパッチ = カーネルそのものを書き換え  外部ライブラリ = カーネルモジュール  各々で読み換えてください
  • 8.
    Vimの通信機能  全てをVimだけでやることは不可能なので、外部と の通信機能が必要  Vmでいうところの、VM RPC (Remote Procedure  Call)  VimはRuby, Tcl, Python, Perl等、外部言語のイン タフェースが充実している  さらに、共有ライブラリも呼び出せる! これはEmacs では不可能  ただし外部プログラムとの通信機能は弱い
  • 9.
    Emacsとの比較  Emacsはシェルと通信するための機能が充実して いる 例: shell­mode, term­mode, eshell­mode, comint­ mode...  かたくなにエディタであろうとするVimには入る予 定なし
  • 10.
    vimproc  なければ作ってしまえばいいじゃない! ということ で、Yukihiro Nakadairaさんの通信ライブラリを改 造して使っています。  pipe, pty, socketを用いた通信が可能  vimshellと連携してコマンドのパースが可能  github上で公開中
  • 11.
    vimshell  100 % Vim Scriptで書かれたシェル  EmacsでいうところのEshell  内部の通信ではvimprocを使っている  neocomplcacheで自動補完  将来的にはシェルスクリプトを書けるようにしたい ……  github上で公開中
  • 12.
  • 13.
    おまけ  そろそろVim Scriptに足りない機能が見えてきた。 パッチを書くべきなのか……  ちなみに、以前Vim Scriptでバイナリエディタを作ろ うとしたことがあります →途中で挫折  時間があったら再挑戦したいです。目指せVimの hexl­mode!