🐶
Neovimで電卓
この記事はVim Advent Calendar 2022(その2) の 9 日目の記事です。
Neovimでも電卓使いたいですよね!??
要望に応えて作りました
特徴
-
hjkl
を使用しフォーカスを移動させ、<CR>
でキーを押下可能 - 電卓用バッファーにはバッファーローカルなマッピングを追加しているため、カーソルを移動しなくても
1
,+
,2
,=
のような打鍵でキーを押下可能 - Lua の
loadfile()
を使用しているため LuaJit に依存した計算結果を出力 - Windows の電卓アプリの挙動を参考にしている
-
1 + 2 + 3 = = =
は1 + 2 + 3 + 3 + 3
となり、計算結果は12
-
1 + 2 + 3 + = =
は1 + 2 + 3 + (1 + 2 + 3) + (1 + 2 + 3)
となり、計算結果は18
- さぼっているところ(特に符号まわり)もあるため電卓アプリ完全再現はできていません
-
-
=
キー押下時点の計算式をもとに計算結果を出力-
2 + 2 * 3 =
と入力した場合、計算結果は8
(Windows の電卓アプリでは12
になる)
-
その他
色々やってます
- キー押下時に押されたキーをフラッシュ
-
\%23c
,%23l
を使ってフォーカス用のハイライト生成 - フォーカスが他の window に移った場合は電卓 window を自動で閉じる
-
scrolloff = 999
を設定して<C-f>
や<C-b>
でスクロールしないよう設定 -
<C-o>
で他のファイルに移動しないよう:clearjumps
- Neovim リサイズ時に window を中央寄せ
- ヘルプ記載(初めて書いた)
- vustedを使用したテスト
- カーソルを見えづらくする
- fern.nvimのコードを参考にしています)
- (電卓 window 最下行の真ん中にちょっと残ってる)
- CI
- StyLua を使用したフォーマットチェック
- vusted を使用したテスト
感想
フローティングウィンドウを使ったプラグインを作ってみたかったというのがきっかけです。
楽しく作ることができました。
head の Neovim じゃないと vim.api.nvim_open_win の config に title
, title_pos
を指定できないのは CI 落ちて初めて知りました。やはりテスト大事。<C-^>
で副ファイルに移動しないよう設定したかったけどやり方分からずタイムアップ。また調べます。
時間とやる気があれば、denta9.vim(Vim9script 使って電卓実装)も作ってみたいです
最後に
- Happy Vim(Neovim) Life!!
Discussion