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