count j、count k をジャンプ履歴に記録する
relativenumber を有効にすることで 10j や 10k などの上下移動がしやすくなる。
しかし、100G のような行移動と異なりジャンプ履歴に残らないため <C-o> や <C-i> で移動前のカーソル位置に戻れない。
以下のキーマップ設定をすることで [count]j、[count]k がジャンプ履歴に登録されるようになり、<C-o>、<C-i> でカーソル位置の行き来が可能になった。
code:keymap.lua
-- store jump record
vim.keymap.set("n", "j", "v:count == 0 ? 'j' : 'm`' .. v:count .. 'j'", { expr = true, noremap = true })
vim.keymap.set("n", "k", "v:count == 0 ? 'k' : 'm`' .. v:count .. 'k'", { expr = true, noremap = true })
expr = true とすることで引数を式として扱われる。三項演算子の結果に応じた結果が j、k にマップされる
m\` で直前のカーソル位置をマークする
v:count は normal mode で最後に実行された count が参照される。10j を実行した場合は v:count = 10 となる
Bluesky でこの悩みをポストしたところ、monaqa さんが教えてくださった。ありがとうございます。
参考