😽
VSCodeをvim bindingで使い始めたのでまとめる
やりたかったことが実現したのでまとめます。
実現したこと
- カーソル移動はvimがいいが、たくさんのコマンドは覚えたくない
- VSCodeの操作性は落としたくない
最低限のカーソル移動
-
vim bindingにするために使っている拡張
-
必要最低限の操作方法まとめ(chatgptに助けられた)
カテゴリ コマンド 動作 細かい移動 h, j, k, l 言わずと知れたvimの移動方法、説明割愛 単語移動 b 現在の単語の先頭、または前の単語の先頭 単語移動 e 現在の単語の末尾、または次の単語の末尾 行内移動 ^ 行の最初の非空白文字
似たコマンドに0があるが、空白文字を含む行頭に移動するので^の方が使い勝手がいい行内移動 g_ 行の最後の非空白文字
似たコマンドに$があるが、visualモードの時に改行文字を含むのでg_の方が使い勝手がいい画面内移動 shift + h 画面の一番上に移動
後続のm,lと合わせてHigh, Middle, Lowで覚えるといい
後続の「画面をスクロール」系のものでスクロール後に使うといい画面内移動 shift + m 画面の真ん中に移動 画面内移動 shift + l 画面の最後に移動 画面をスクロール ctrl + y 画面を一行上にスクロール
長押しするとホイールのような感覚でスクロールする画面をスクロール ctrl + e 画面を一行下にスクロール
長押しするとホイールのような感覚でスクロールする画面をスクロール ctrl + b 画面を1画面幅分上にスクロール
ドカンとスクロールしたいときに画面をスクロール ctrl + f 画面を1画面幅分下にスクロール
ドカンとスクロールしたいときに -
そのほか使いやすさのためにカスタムしたコマンド(一番最後にsetting.json貼るので一部だけ抜粋)
コマンド 動作 When jj 挿入モードをノーマルモードに
escの代わりctrl + j エディタとファイルエクスプローラーのフォーカス切り替え j, k 上下移動 ファイルエクスプローラーフォーカス時 n ファイル作成 ファイルエクスプローラーフォーカス時 f フォルダ作成 ファイルエクスプローラーフォーカス時
VSCodeの操作性は落としたくない
-
新しく設定したショートカット
- マウスを触りたくなかったり、vimにショートカットが取られたりしたため新たに設定
コマンド 動作 alt + d 選択した文字列と同じ文字列を追加選択
ctrl + dがvimに取られるのでその代わりctrl + tab 開いてるファイルの次のファイルに移動 ctrl + shift + tab 開いてるファイルの前のファイルに移動 ctrl + f12 ホバーの表示
型とかが表示される -
新しく知ったショートカット
コマンド 動作 f12 カーソル位置の変数の定義へ移動 & 参照してる箇所へ移動
ctrl + クリックを利用していたのでショートカットを使うようにした
ショートカットの設定ファイル全文
// Place your key bindings in this file to override the defaults
[
{
"key": "ctrl+j",
"command": "workbench.view.explorer",
"when": "editorFocus && vim.mode == 'Normal'"
},
{
"key": "ctrl+j",
"command": "workbench.action.focusActiveEditorGroup",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "j",
"command": "list.focusDown",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "k",
"command": "list.focusUp",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "n",
"command": "explorer.newFile",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "f",
"command": "explorer.newFolder",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "enter",
"command": "-renameFile",
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "r",
"command": "renameFile",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "d",
"command": "deleteFile",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "y",
"command": "filesExplorer.copy",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "p",
"command": "filesExplorer.paste",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "ctrl+f12",
"command": "editor.action.showHover",
"when": "editorFocus && vim.mode == 'Normal'"
},
{
"key": "alt+d",
"command": "editor.action.addSelectionToNextFindMatch",
"when": "editorFocus && vim.mode == 'Visual'"
},
{
"key": "ctrl+tab",
"command": "workbench.action.nextEditor"
},
{
"key": "ctrl+shift+tab",
"command": "workbench.action.previousEditor"
}
]
Discussion