少し前に昼食を食べながら調べてたらdevelopper toolのconsoleでCodeMirror.Vim.map(...)
をやればできることに気付いてそのままブックマークレットにしたのだが、手元で作業しながらたびたび編集していたら押すのが面倒になってきたのでもうちょっとだけ調べた。
やり方
管理画面のカスタムスクリプトに以下を書く。
window.addEventListener('load', (event) => { if (!window.CodeMirror || !CodeMirror.Vim) { console.log("[warn] no CodeMirror") return } CodeMirror.Vim.unmap('<Space>'); CodeMirror.Vim.map('<Space><Space>', 'l'); CodeMirror.Vim.map('<Space>h', '0'); CodeMirror.Vim.map('<Space>l', '$'); CodeMirror.Vim.mapCommand('jk', 'action', 'exitInsertMode', {}, {context: 'insert'}); // ...好きなだけ })
これだと全員に適用されるだろ
そんな気がする。今これをやっているgrowiは自分専用のメモなので、これで十分と判断してこれ以上やらなかった。
なんで最初に<Space>
をunmap
してるの?
手元ではleader
に<Space>
を使っているので、<Space>l
とかに$
をマップしたかった。
すると、CodeMirror
ではデフォルトで<Space>
がl
にマップされているので、<Space>l
を全体としてマップすることができない。
なので一度<Space>
をunmap
する。すると、<Space>
直後に何かが来るものをマップすることができる。
possible vim leader key work-around? - #4 by benhormann - discuss.CodeMirror
ということがここに書いてあった。
最後の長いの何?
なんか<Esc>
にマップしようとしたら上手くいかなかったので直接exitInsertMode
に対してマップした。そういうこともできますよというメモ。
初期はjj
に<Esc>
をマップしていたのだけど、何度も連打していると人差し指にそこそこの負荷がかかったので今はjk
を<Esc>
にマップしている。
連打よりも人差し指→中指の方が速いし疲れない。大抵勢い余ってjkl
と打っているがl
は無害なので問題になっていない。
連打よりは文中に登場しそうだが、今のところDijkstra
以外で困ったことはない。
Dijkstra
の大ファンで毎日感謝の写経1万回をやってる人は別のものにマップした方が良いと思う。
個人用メモにgrowiってオーバースペックじゃない?
そうかも。
ラボではcrowiをオンプレで立ち上げて管理とかしてたので管理も書き方とかも慣れていたというのはある。慣れていたのはcrowiにだけど。 それにgrowiはdocker-composeでやったからcrowiで個別のサービスを管理してたときに苦労したような問題は何一つ起きなかったけど。
ユーザーごとにマッピングを変える場合はどうするべきだろう。
まあ順当に、ユーザーのホーム以下にvimrc
みたいなページを用意して、そこにmap x y
みたいなのを書かせて、それを取得してパースして実行という形になるだろうか。
load
後に使えるappContainer
にはcurrentUsername
が入っているので、ユーザーのホーム以下の決まったページへのパスはすぐにとれるはず。
内容の取得はわからないけど、普通は何かしらのAPIがあるんじゃないだろうか。
パースはちゃんとやると面倒だが、map x y
だけの簡単なものなら一瞬でできそう。
できそうなんだけど、Web周りに慣れていないので時間がかかりそうだったし、自分しか使ってないので必要性がないためにやらなかった。
うーんWeb関係のことをほとんど何一つやったことがない(古の時代に人が作ったWebサイトに手打ちしたHTMLとかごく簡単なスクリプトを足したりしたくらい)のが地味に色んなところで効いてくる。 ちゃんと勉強した方がいいんだろうけどな。