vim = vm

13

Click here to load reader

Upload: shougo

Post on 12-May-2015

5.388 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Vim = VM

Vim = VM

Page 2: Vim = VM

自己紹介

ハンドルネーム:Shougo Vim大好き

CPUやOSの話も好きです

職業:学生

Vim歴:4年

私の.vimrcは1576行あるぞ!(コメントを除く)

Page 3: Vim = VM

今日はVimの話をします。

Page 4: Vim = VM

なぜVimなのか?

カーネル / VM探検隊↓

カーネル / VIM探検隊↓

Vim

自然な発想!

Page 5: Vim = VM

まじめな解説

ハードウェア

ホストOS

VMMアプリケーション

アプリケーション

Type II VMM

ハードウェア

ホストOS

アプリケーション

アプリケーション

Vimmer's Environment

Page 6: Vim = VM

「Vimは環境」

Vimはマルチプラットフォーム

Vimさえあれば、その上で様々なアプリケーションが動作する

例: テトリス,  Twitterクライアント, シェル,  端末

辞書ビューワ, ファイラー

よって、Vim = VMの式がなりたつ

Page 7: Vim = VM

Vimの低レベルレイヤー

VimはVim Scriptで拡張が可能

Vim ScriptはOS用語でいえばDevice Driver それでも実現不能な場合は外部ライブラリを用い

るか、ソース本体にパッチを当てる

ソースにパッチ = カーネルそのものを書き換え

外部ライブラリ = カーネルモジュール

各々で読み換えてください

Page 8: Vim = VM

Vimの通信機能

全てをVimだけでやることは不可能なので、外部との通信機能が必要

Vmでいうところの、VM RPC (Remote Procedure Call)

VimはRuby, Tcl, Python, Perl等、外部言語のインタフェースが充実している

さらに、共有ライブラリも呼び出せる! これはEmacsでは不可能

ただし外部プログラムとの通信機能は弱い

Page 9: Vim = VM

Emacsとの比較

Emacsはシェルと通信するための機能が充実している

例: shell­mode, term­mode, eshell­mode, comint­mode...

かたくなにエディタであろうとするVimには入る予定なし

Page 10: Vim = VM

vimproc

なければ作ってしまえばいいじゃない! ということで、Yukihiro Nakadairaさんの通信ライブラリを改造して使っています。

pipe, pty, socketを用いた通信が可能

vimshellと連携してコマンドのパースが可能

github上で公開中

Page 11: Vim = VM

vimshell

100 % Vim Scriptで書かれたシェル

EmacsでいうところのEshell 内部の通信ではvimprocを使っている

neocomplcacheで自動補完

将来的にはシェルスクリプトを書けるようにしたい……

github上で公開中

Page 12: Vim = VM

vimshell

今からデモをやります

Page 13: Vim = VM

おまけ

そろそろVim Scriptに足りない機能が見えてきた。パッチを書くべきなのか……

ちなみに、以前Vim Scriptでバイナリエディタを作ろうとしたことがあります

→途中で挫折

時間があったら再挑戦したいです。目指せVimのhexl­mode!