vim = vm
Post on 12-May-2015
5.388 Views
Preview:
TRANSCRIPT
Vim = VM
自己紹介
ハンドルネーム:Shougo Vim大好き
CPUやOSの話も好きです
職業:学生
Vim歴:4年
私の.vimrcは1576行あるぞ!(コメントを除く)
今日はVimの話をします。
なぜVimなのか?
カーネル / VM探検隊↓
カーネル / VIM探検隊↓
Vim
自然な発想!
まじめな解説
ハードウェア
ホストOS
VMMアプリケーション
アプリケーション
Type II VMM
ハードウェア
ホストOS
アプリケーション
アプリケーション
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はシェルと通信するための機能が充実している
例: shellmode, termmode, eshellmode, comintmode...
かたくなにエディタであろうとするVimには入る予定なし
vimproc
なければ作ってしまえばいいじゃない! ということで、Yukihiro Nakadairaさんの通信ライブラリを改造して使っています。
pipe, pty, socketを用いた通信が可能
vimshellと連携してコマンドのパースが可能
github上で公開中
vimshell
100 % Vim Scriptで書かれたシェル
EmacsでいうところのEshell 内部の通信ではvimprocを使っている
neocomplcacheで自動補完
将来的にはシェルスクリプトを書けるようにしたい……
github上で公開中
vimshell
今からデモをやります
おまけ
そろそろVim Scriptに足りない機能が見えてきた。パッチを書くべきなのか……
ちなみに、以前Vim Scriptでバイナリエディタを作ろうとしたことがあります
→途中で挫折
時間があったら再挑戦したいです。目指せVimのhexlmode!
top related