VimをOSにする
こんにちは。Emacsを使ってみたい静カニです。OSと言えばEmacsがOSとよく言われますよね。EmacsがOSだと言われる所以の一つは拡張性です。 もちろん(Neo)Vimも拡張性が高いと言われますよね。ということでNeoVimをOSにしていきましょう。ちなみに私にはVim Scriptの知識が皆無なのでVimではなくNeoVimで行います。
(ちなみに動作検証が面倒で全く実装すらしていません。単に下書きフォルダを消化したかっただけです。試すときは自力で。)
OSの基準
OSを作るとなると、そもそも何をもってOSとするのか、という定義が必要です。 本当のOSを作る場合自分が好きなだけ作ればよいですが、これはジョークOSなのでメインにしませんしどこで作るのをやめるのかを考えておかないと永遠に記事が完成しません。
ということでEmacsでできること(のうちテキスト編集に直接関係がないこと)がある程度できればOSとします。 なんだかんだでVimとEmacsはどちらもテキストエディタなので、EmacsでできることはVimでもできるはずです。
一覧
実際何ができればOSかの具体的な部分を書き出してみます。
- ファイル操作
- +リモート
- ターミナル
- ゲーム
- テトリス
- pong(卓球みたいな)
- ヘビゲーム
- メール
- ブラウザ
- チャット
- org-mode
- つよつよ電卓
- 音楽プレイヤー
あと普通のOSにあって今回も欲しい機能でVimでもできるものも書いておきます。
- ウィンドウ管理
- IME
レギュレーション
NeoVimの中でTmuxを動かしてその中で色々起動するのは反則感があります。ということで今回はNeoVimネイティブか、少なくともNeoVim上のラッパーであるという条件を付けます。
実装
とにかくそれぞれの機能に対して対応するプラグインを入れれば最終的に完成とします。ということで順番に対応するプラグインを書いていきます。
ファイル操作
ファイラーは色々なものがありますが今回はoil.nvimにします。READMEを見るに一応oil.nvimもリモートのファイル対応してるそうです。
oil-ssh://[username@]hostname[:port]/[path]の形式のファイル名を指定すると、sshのリモートファイルを編集できます。使ったことありませんが。
ターミナル
ddt.vimもありますが私が理解していないのでtoggleterm.nvimで。
まあ実はCtrl+/のトグルぐらいしか使っていませんが分割にも対応しているようなので大丈夫でしょう。
ゲーム
テトリスはnvim-tetrisにしました。ヘビさんはsnake.nvimです。 pongは見当たりませんでした。これだけのために作るかというと微妙です。探せばありそうですが面倒なので放置。
ちなみに私が普段の環境に入れているゲームプラグインが2048.nvimだけです。
メール
ラッパーはnotmuch.nvimです。ラッパーと書いたということはもちろん本体があります。notmuchです。
ちなみにNotmuch公式のScreenshotsにはEmacs UIのものしか載っていません。独立したアプリとしてはないのでライブラリですね。
notmuch.nvim側がw3mと連携できるっぽいので次はブラウザ行きます。
ブラウザ
w3mを使います。ラッパーはw3m.vimがありました。最終コミット12年前ですがそれだけ安定しているということでしょう。それよりも作者さんの生存確認…
チャット
チャットというかIRCですね。IRC.nvimというド直球プラグインがあります。
org-mode
太古の昔からneorgとnvim-orgmodeの戦争が起きていたと聞きました。今回はとりあえずneorgを使います。 nvim-orgmodeの開発者がキレるかもしれませんがエディタ界隈の人は心が広いので許してくれるでしょう。
つよつよ電卓
quickmath.nvimが簡単に色々できそうです。こちらも最終コミット2年前ですが枯れているということに断定しておきます。
音楽プレイヤー
Spotifyがあればコンギョでも聞かない限り問題ないです。ということでnvim-spotifyです。
ウィンドウ管理
Vim標準で分割とFloating Windowがあるので標準でi3になっています。つまり改造の必要はありません。
IME
もちろんskkeletonです。VimとIMEの積集合これ以外は正直知らない。
まとめ
これでVimをOSにするためのセットが揃いましたね。動作検証…ナニソレオイシイノ?やっぱりコミュニティの大きさと元の改造のしやすさが組み合わさると大抵のことはできますね。