Neovimの数字jkをジャンプリストに入れる

· 3 min read

Neovimで14jのように数字+jまたはkで移動した後、CTRL-Oで戻りたい。そんな願いを実現しました。

結論からいうと、m'14jのようにm'を付けてマッピングすればできます。Vimも同様です。

本記事では周辺知識と合わせて設定方法を解説します。

CTRL-O、ジャンプリストとは?

そもそもCTRL-OCTRL-Iはジャンプリストを使ってカーソル位置を変更するコマンドです。

ここでいうジャンプとは、Gn%のように数行離れてそうな移動をするコマンドのことです。ジャンプリストに記録されるコマンドは:h jump-motionsから確認してください。

ジャンプリストとは、ジャンプしたときに移動前のカーソル位置を記録したものです。:h jumpsでリストを表示可能です。

本記事では、このジャンプリストに記録することでCTRL-Oでの移動を可能にします。

マッピングするぞ

筆者の例を書いておきます。とりあえずノーマルモードだけ設定しています。

vim.keymap.set("n", "j", function()
if vim.v.count == 0 then
return "gj"
else
return "m'" .. vim.v.count .. "j"
end
end, { expr = true })
vim.keymap.set("n", "k", function()
if vim.v.count == 0 then
return "gk"
else
return "m'" .. vim.v.count .. "k"
end
end, { expr = true })

筆者は、カウントなしならgj、カウントありならjの動きに変更しています。gjは表示行の移動で、行が折り返されているときも見た目どおりに移動してくれます。

カウントありの場合にm'をつけることでジャンプリストにぶっこみます。


以上です。てっきりジャンプリストに関するオプションがあるのかと思っていましたが、こんなところでm'を使うとは思っていませんでした。

14jみたいな移動はいちいち数字を覚えていないため、m'に感謝。