Neovimの数字jkをジャンプリストに入れる
Neovimで14jのように数字+jまたはkで移動した後、CTRL-Oで戻りたい。そんな願いを実現しました。
結論からいうと、m'14jのようにm'を付けてマッピングすればできます。Vimも同様です。
本記事では周辺知識と合わせて設定方法を解説します。
CTRL-O、ジャンプリストとは?
そもそもCTRL-OやCTRL-Iはジャンプリストを使ってカーソル位置を変更するコマンドです。
ここでいうジャンプとは、G、n、%のように数行離れてそうな移動をするコマンドのことです。ジャンプリストに記録されるコマンドは: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" endend, { expr = true })
vim.keymap.set("n", "k", function() if vim.v.count == 0 then return "gk" else return "m'" .. vim.v.count .. "k" endend, { expr = true })筆者は、カウントなしならgj、カウントありならjの動きに変更しています。gjは表示行の移動で、行が折り返されているときも見た目どおりに移動してくれます。
カウントありの場合にm'をつけることでジャンプリストにぶっこみます。
以上です。てっきりジャンプリストに関するオプションがあるのかと思っていましたが、こんなところでm'を使うとは思っていませんでした。
14jみたいな移動はいちいち数字を覚えていないため、m'に感謝。