タイトル画像

Insertを抜けるキーマップの選択肢

みなさん、Insert抜けるのって、どうしてますか?大方は、<Esc>jjの方が多いと思います。ですが、別にjjじゃなくてもいいはずです。 ということで、最近の私のInsert抜けキーマップ事情です。

※この記事は、Vim駅伝の424本目の記事です。前回の記事は、 @thincaさんの、Meguro.vim #32 を開催しましたです。

要件

とりあえず、私は`jj`にしようかと思ったのですが、`jj`以外のものでやってみたい、と思いました。 ということで、とりあえずどのようなものがいいのか、を考えてみました。それが以下です。

ということで、LLMに投げてみました、結果、fjが良いということになりました。 で、矯正用に<Esc>をメッセージを表示する関数にマッピングして、やってみました。

改善フェーズ

実際にやってみたとこ、悪くなかったのはそうですが、この`fj`をしたあと、`:w`や`:wq`をする頻度が高いことに気付きました。 ということで、マッピングしました。ホームポジションがいいので、それぞれ`fk`、`fl`にマッピングしました。 ただ、`fl`が`float`などで意外と使うのです。ということで、`fh`にマッピングし直しました。

追記

`fk`を使う頻度が高いことに気付いたので`fj`と入れ換えました

この状態で現在に至っています。

一応コードも出しておきます(内部システムを改造していたらシンタックスハイライトが壊れたままになっています。 ハイライト済みのものが見たい方は面倒ですがgistを見てください)。

vim.keymap.set('i', 'fj', '<Esc><Cmd>w<Cr>', { noremap = true })
vim.keymap.set('i', 'fk', '<Esc>', { noremap = true })
vim.keymap.set('i', 'fh', '<Esc><Cmd>wq<Cr>', { noremap = true })
vim.keymap.set({ 'i', 't' }, '<Esc>', vim.schedule_wrap(function()
    vim.notify("Escは無効にしておいたぞ。代わりに 'fj' を使っとけ(^^)", vim.log.levels.WARN)
    return ""
end), { noremap = true, expr = true })

問題点

一応、まだ問題点はあります。それが、skkeletonとの兼ね合いです。 というのも、このプレフィックスは`f`な訳ですが、この`f`、skkeletonが吸ってしまうのです。 なので、skkeleton有効化中に、`fk`と打つと、最初に`f`が出てきて、`k`を打つと`f`が消されて`k`が出てきて終了、となります。 気合で`f`を潰すと、私は「ふ」を`fu`と打つ人間なので、「ふ」と打ったつもりが「う」にされる、というのは不快です。 ということで、今度暇が出来たらdoc確認と分からなければソース探検隊をしてどうにかしたいと思います。

まとめ

他の人がみんな`jj`を使っているのを見て、逆張りで`f`をプレフィックスにしてみました。 `f`自体は別として、`jk`で`:w`相当のことが出来るようにする、としても面白いと思います。 良かったら他の記事も見ていってください。