背景
ObsidianのVimモードで問題をなんとかしようとおもっていろいろやってみたという記事で書いた通り、
- Obsidianというメモアプリがすばらしい
- Vimの挿入モードで
<C-d>
を右一文字削除にしたいが、うまく設定できなくて困った - Vimrc Supportプラグインの作者に相談すると「CodeMirrorのバグだとおもうから、バグレポートするといいとおもうよ」といわれたけど、待ってるのもやだ
- ので、
main.js
を直接書き換えた
これで(個人的には)満足していたのだけれど、Vimrc Supportプラグインの作者に「もう少し一般化すると、他の人も助かるなあ」といわれたので、パッチを送った。
改訂の要点
main.js
の、CodeMirror.Vim.defineOption('tabstop')
とvimCommands.split("\n").forEach()
のあいだに、CodeMirror.Vim.defineEx('iunmap')
を追加
CodeMirror.Vim.defineOption('tabstop', 4, 'number', [], function (value, cm) {
if (value) {
cmEditor.setOption('tabSize', value);
}
}); // ←ココ!
CodeMirror.Vim.defineEx('iunmap', '', function (cm, params) {
if (params.argString.trim()) {
CodeMirror.Vim.unmap(params.argString.trim(), 'insert');
}
});
vimCommands.split("\n").forEach(function (line, index, arr) {
if (line.trim().length > 0 && line.trim()[0] != '"') {
CodeMirror.Vim.handleEx(cmEditor, line);
}
});
CodeMirror
のdefineEx()
メソッドをつかって、iunmap
というコマンドを追加している。
.obsidian.vimrc
に
iunmap <C-d>
と書けば良い。
ソースコード修正とプルリク
実際にはmain.ts
を修正し、GitHub
からプルリクを送った。最終形になるまでになんどかやりとりあったけど、merge
されてリリースされたので、もう手でしこしことプラグインを直す必要がない!!!感激。
リソース
CodeMirror
のキーマップ定義ファイル
https://codemirror.net/keymap/vim.js
CodeMirror
のオンラインデモ
https://codemirror.net/demo/vim.html
CodeMirror
のマニュアル
https://codemirror.net/doc/manual.html
Obsidian Vimrc Support Pluginのサイト(GitHub)
https://github.com/esm7/obsidian-vimrc-support
環境
Obsidian Vimrc Support version 0.2.2
Obsidian v0.10.1
macOS BigSur バージョン 11.1
MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)