## 事象 [[Vimモード (Obsidian)|Vimモード]]を有効にし、`u` や `<C-r>` によるアンドゥやリドゥを実行しても、`<C-z>` や `<C-y>` による動作と異なる動作になる。具体的にはカーソルが変な場所に移動したりする。 ### 環境 | 対象 | バージョン | | --------------------------------------------------------- | ----------- | | [[Ubuntu]] | 24.04.1 LTS | | [[Neovim]] | 0.10.3 | | [[Obsidian]] | 1.8.7 | | [[Vimrc Support Plugin (Obsidian)\|Vimrc Support Plugin]] | 0.10.2 | ## 原因 不明。 ## 解決方法 [[Vimrc Support Plugin (Obsidian)|Vimrc Support Plugin]]を使って、`u` と `<C-r>` のキーマップを[[Obsidian]]のコマンドに割り当てる。 ``` exmap undo jscommand { editor.undo(); editor.setCursor(editor.getCursor()) } nmap u :undo<CR> exmap redo jscommand { editor.redo(); editor.setCursor(editor.getCursor()) } nmap <C-r> :redo<CR> ``` > [!hint] > `editor.setCursor(editor.getCursor())` は選択状態を強制クリアするために実行する。アンドゥの内容によっては選択状態のまま復元されることがある。その場合は[[Vimモード (Obsidian)|Vimモード]]において `u` や `<C-y>` の意味合いが変わってしまい、連続アンドゥ/リドゥできなくなってしまう。それを回避するために設定する。