## 事象
[[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>` の意味合いが変わってしまい、連続アンドゥ/リドゥできなくなってしまう。それを回避するために設定する。