1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ObsidianのVimモードで<C-d>問題をなんとかしようとおもっていろいろやってみた

Last updated at Posted at 2020-12-24

背景

Obsidianというメモアプリがすばらしい。

  • デフォルト機能で、Vimキーバインドにもできる
  • サードパーティプラグイン「Obsidian Vimrc Support」をつかって、キーマップをカスタマイズもできる

ところが、個人的な好みで、挿入モードで<C-d>右一文字削除にしたいのだが、これだけがうまく設定できなくて困っていた。

Vimrc Supportプラグインの作者に相談すると「CodeMirrorのバグだとおもうから、バグレポートするといいとおもうよ」とのことだけど(いちおうレポートはしたけど)、バグフィクスを待ってるのもやだ。

対応

サードパーティプラグインのmain.jsに一行追加する(場所はVAULT_ROOT/.obsidian/plugins/obsidian-vimrc-support/main.js

main.js
前略

 // Make sure that we load it just once per CodeMirror instance.
 // This is supposed to work because the Vim state is kept at the keymap level, hopefully
 // there will not be bugs caused by operations that are kept at the object level instead
 CodeMirror.Vim.unmap('<C-d>', 'insert'); // ←ココ
 //
 CodeMirror.Vim.loadedVimrc = true;

後略

けっしてきれいな対応ではない(プラグインがアップデートするたびに、追記しなければならない)けれど、いまのところ確実に動く。

  • どこかほかに書くとよいのだとおもうが……だれかヘルプ……

やったけどうまくいかなかったこと

.obsidian.vimrcに下記を書くのではうまく行かなかった。

imap <C-d> <Del> → <Del>はnormalモードのxにマッピングされているから

unmap <C-d> → normalモードでのScrollDownは消えるが、insertモードのindentRightは残る。CodeMirrorでのバグだとおもわれる

Obsidianで:imap <C-d> <C-d>とやってうまくいくこともあったが、consoleを見ていると、キーマップが解釈できずにスタックを使い果たし、困ってデフォルト動作をするようになっているように見えた。再現性も低いし、Obsidianに負担もかけているようなので、この方法は却下。

リソース(リンク)

jk<Esc>にというイシューを手がかりにしてすすめた
https://github.com/codemirror/CodeMirror/issues/6386

CodeMirrorのキーマップ定義ファイル
https://codemirror.net/keymap/vim.js

CodeMirrorのイシューにも上げてみた
https://github.com/codemirror/CodeMirror/issues/6535

CodeMirrorのオンラインデモ
https://codemirror.net/demo/vim.html

CodeMirrorのマニュアル
https://codemirror.net/doc/manual.html

環境

Obsidian Vimrc Support version 0.2.1
Obsidian v0.10.1
macOS BigSur バージョン 11.0.1
MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)

後日談

もう少しちゃんとコードを書いて、プラグインにマージしていただいた。
⇒ Obsidianの問題の解決を少し前に進めた

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?