どの環境でもコピペできるようにVSCodeのsettings.jsonの個人設定をネットに公開する。

CtrlがVSCodeとVimでバッティングするのはWindowsなので以下はWindowsで動作確認している。MacではVSCode側がCtrlではなくCommandを利用するため、handleKeys部分のみ消せば問題ない想定。

{
    "vim.handleKeys": {
        // Vim側
        "<C-a>": true,  // 数値のincrement
        "<C-x>": true,  // 数値のdecrement
        "<C-b>": true,  // Page Up
        "<C-f>": true,  // Page Down
        "<C-p>": true,  // 前オートコンプリート
        "<C-n>": true,  // 次オートコンプリート
        // VSCode側
        "<C-d>": false, // 単語選択 ※Vimのgbでもできるが、Vimの半ページ送りは使用しないため
        "<C-e>": false, // ファイルを開く ※@: を入力すると、現在のファイルのメソッド等をリストアップしてくれる
        "<C-j>": false, // terminalを開く
        "<C-s>": false, // 保存
        "<C-z>": false, // 戻す
    },
    // memo
    /*
      vim
        gd                        // Go to Definition ※VSCodeではF12
        gh                        // Go to Hover メソッド等のtool tipを開く
        gg                        // 先頭行に移動 ※最終行:G
        %                         // 対応するカッコに移動
        0                         // 行頭に移動 ※行末:$、文頭:^
        gm                        // 行の中間に移動
        30|                       // 30文字目に移動
        w                         // 単語(word)単位で移動 ※逆:b、スペースや記号を末尾に含まない単語単位:e
        :vs                       // タブ分割
        :noh                      // highlight消去
        u                         // 戻す ※逆:<C-r>
        visual select -> u        // 小文字 ※大文字:U、guiw / gUiwはnormal modeで変換可能、一文字だけの場合はgul
        ~                         // 大文字小文字変換
        o                         // 一行下にinsert modeで入る ※上:O、VSCodeの Ctrl + Enter (上は Ctrl + Shift + Enter) でもよい
        D                         // 行末まで削除
        J                         // 行結合
        .                         // 直前のコマンドを繰り返し
        *                         // カーソル位置の単語検索 ※visualstarにより選択文字列での検索も可能
        /                         // 検索 ※逆:?、次:n、前:N
        Ctrl + y                  // 上の文字と同じ文字を入力
        ysiw"                     // "で単語を括る ※You Surround Inner Word with " (viwS" も可能)
        yy                        // 行yank ※同種:dd cc
        yiw                       // 単語yank ※同種:viw diw ciw
        yi{                       // 単語yank ※同種:vi{ vi( vi" di{
        cit                       // HTMLタグで囲まれた文字を変更 (change inner tag)
        v at at                   // HTMLタグ全体を選択
        Shift + v                 // 行選択 ※<C-v>:矩形選択
        visual select -> g <C-a>  // 連番
        visual select -> g <C-x>  // 連番(逆)
        visual select -> o        // 選択の反対側にカーソル移動 ※va{ o Shift+v でJavaのメソッド全て選択できる
        :%s/<pattern>/<replace>/g // 置換 ※visual選択中は :s/検索文字/置換文字/g
        ma                        // Mark a ※ `a or 'a で移動できる。:marks で一覧表示
        i, a, s (一文字削除+insert mode), x
      VSCode
        Ctrl + Shift + L          // 単語 or 選択範囲 の同じものを全選択
        Ctrl + Shift + F          // 全体検索・置換 ※置換は Ctrl + Shift + H でもよい
        Ctrl + Shift + P          // コマンドパレット
        Ctrl + Shift + O          // シンボル移動(現在のファイルのメソッド等をリストアップしてくれる) ※Ctrl + E @: と Ctrl + Shift + O @: は同じ
        Ctrl + Enter              // 一行下に行を追加 ※上:Ctrl + Shift + Enter
        Ctrl + Tab                // 開いていたファイルの履歴
        Ctrl + \                  // タブ分割
        Ctrl + 1                  // 左タブ ※Ctrl + 2:右タブ
        Ctrl + `                  // terminalへフォーカス ※Ctrl + 1 で editor に戻れる
        Ctrl + j                  // terminalを開く/閉じる
        Ctrl + .                  // quick fix
        Ctrl + ,                  // settings
        Ctrl + /                  // comment out
        Shift + Alt + →           // 選択範囲を広げる ※VimのHTMLでは v at at だがもっと汎用的
        F2                        // Rename Symbol リファクタリング ※HTMLタグ変更時も使える。Vimでは cst<span>
        F12                       // Go to Definition
        "                         // "" に自動補完されるが、文字列を入力後に再度 " を打てば、"" 内から自動で右側に抜けられる
    */
    "vim.visualstar": true, // visual modeで選択したまま*検索
    "vim.leader": "<space>",
    "vim.normalModeKeyBindingsNonRecursive": [
        // Ctrl + fで検索したくなったときは space + f で代用
        { "before": ["<leader>", "f"], "commands": [{ "command": "actions.find" }] },
        // Ctrl + nで新規ファイルを開きたくなったときは space + n で代用
        { "before": ["<leader>", "n"], "commands": [{ "command": "workbench.action.files.newUntitledFile" }] },
    ],
    "vim.visualModeKeyBindingsNonRecursive": [
        // visual modeでpasteしても、yank内容が変わらない ※gvで直前に選択していたものを選択しなおし、yでyank
        { "before": ["p"], "after": ["p", "g", "v", "y"] },
    ],
    "vim.useSystemClipboard": true,
    "vim.hlsearch": true, // search highlight
    "vim.incsearch": true, // incremental search
    "vim.smartcase": true, // 検索文字列に大文字がない限りcase insensitive
    "vim.highlightedyank.enable": true, // yank highlight
    "vim.highlightedyank.duration": 500, // yank highlight time


    "terminal.integrated.commandsToSkipShell": [
        "-workbench.action.quickOpen", // terminalではCtrl + Eで行末 ※Ctrl + Aで行頭
    ],


    "workbench.editor.enablePreview": false, // [エクスプローラー]ビューからファイルを常に通常のエディタに開くようにする
    "editor.minimap.enabled": false,
    "git.openRepositoryInParentFolders": "never",
    "files.eol": "\n",
    "files.insertFinalNewline": true,
    "files.autoSave": "onFocusChange",
}