✌️

VSCode Neovim Extension を使えば、修飾キーが1つ増えるぜ

2024/01/22に公開

ラブグラフ開発インターンの arawi です。
今日は Vim に関わる記事です。
Vim は去年から使い始めてやっと慣れてきました。

TL;DR

  • Vim のノーマルモードではスペースキーを使わないから、スペースキーを使うキーバインディングを設定できる
  • vscode neovim 必須級キーバインド4選を読んで、スペースキーが実質的に修飾キーとなることが大きな強みだと感じた

VSCode Neovim Extension (vscode-neovim)

VSCode で Neovim を使えるようになる拡張機能です。
Vim と VSCode 双方の恩恵を受けることができ、非常に便利です。
仕組みとしては裏で起動した Neovim に操作を送っているようで、動作が軽快で安定しているところが良さとなっています。
Vim に憧れるけどとっつきにくいな・・・って人に最適の拡張です!

GitHub: https://github.com/vscode-neovim/vscode-neovim

気づきの発端になった記事

vscode-neovim をいろいろとカスタマイズする中で、vscode neovim 必須級キーバインド4選という記事に出会いました。みなさん御用達の jj[1] はもちろん、Space + D で定義ジャンプも設定できるようです。

ん・・・?

Space + D・・・?

なんでキーバインドにスペースが使えるんだ・・・?

はっ!!!!!

Vim はノーマルモードだとスペースキーを使わないからキーバインドにスペースが割り当てられるんだ!!!

ということに気づきました。

つまり、ノーマルモードではスペースキーを Shift, Command, Control, Option に次ぐ新たな修飾キーとして使うことができるんですね。スペースキーは常に親指を置いているので、スペースキーを修飾キーとして使えると非常に使いやすいです。

ちなみに先ほど紹介した定義ジャンプはデフォルトでは F12 に設定されています。F12、、、遠すぎるだろ、、、
Space + D なら、らくらく押すことができます。

現状の keybindings.json

ということで、元の記事も参照しつつ、スペースキーを使ったキーバインドをいくつか設定しました。
キーバインドを加えるには keybindings.json に記述を加えます。

keybindings.json は Shift + Command + P でコマンドパレットを開いたあと Open Keyboard Shortcuts (JSON) を選択すると開くことができます[2]

以下が私の keybindings.json です。
いろいろと試してみて、更新していこうと思います。

keybindings.json
[
    {
        // jj で入力モードを抜ける
        "command": "vscode-neovim.compositeEscape1",
        "key": "j",
        "when": "neovim.mode == insert && editorTextFocus",
        "args": "j"
    },
    {
        // 定義ジャンプ
        "key": "space d",
        "command": "editor.action.goToDeclaration",
        "when": "neovim.mode == normal && editorTextFocus",
    },
    {
	// 戻る
        "key": "space b",
        "command": "workbench.action.navigateBack",
        "when": "neovim.mode == normal && editorTextFocus",
    },
    {
        // 進む
        "key": "space f",
        "command": "workbench.action.navigateForward",
        "when": "neovim.mode == normal && editorTextFocus",
    },
    {
        // ホバー
        "key": "space h",
        "command": "editor.action.showHover",
        "when": "neovim.mode == normal && editorTextFocus",
    },
    {
        // ターミナルにフォーカス
        "key": "space t",
        "command": "terminal.focus",
        "when": "neovim.mode == normal && editorTextFocus",
    },
]

おわりに

個人的には「ターミナルにフォーカス」のショートカットがデフォルトで存在せず、割当先の筆頭になりそうな Ctrl + T(Terminal の T)は typo の修正にぼちぼち使っていた[3]ため、直感的な割り当て先がなくて困っていたのが解消できて嬉しいですね。
いろんな可能性があると思うので、みなさん使っていきましょう〜

脚注
  1. j を2回連続で入力することで入力モードを抜ける ↩︎

  2. 地味にわからず苦戦したポイント ↩︎

  3. カーソルの前後がひっくり返るショートカットが割り当てられている ↩︎

ラブグラフのエンジニアブログ

Discussion