1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vscodeとvimの良いとこ取り設定

Last updated at Posted at 2024-06-18

vscodeとvimのいいとこどり設定

記事を書く経緯

まず自分のIDEの経歴からご紹介します

  • sublime text 4ヶ月
  • vim 3ヶ月
  • vscode 5ヶ月
  • lunarvim 5ヶ月
  • vscode vim 6ヶ月

vim歴は約1年8ヶ月です。
vimmerになりたかった理由は『かっこいいから』です。
一時期lunarvimを使用していましたが、会社でvscodeを強要されたため仕方なくvscode vimを使っています。

vimの利点

かっこいいvimですが、かっこいいだけではないです。
全て『マスターすれば』の接頭辞が必要ですが、以下に利点を列挙します

  • テキスト編集が速い
  • マウスに触らなくて済む
  • キーマップやプラグインのカスタマイズが自由
  • terminal上で完結
  • linux環境になっても動じない

以下はデメリットです

  • LSP(「ここ構文エラーですよ」とか赤い波線で教えてくれるやつ)がデフォルトで備わってない
  • プラグイン多すぎて何使っていいか分からない
  • カスタマイズにこだわりすぎて時間が溶ける

キーマップ編集は好きですが、何のプラグインを入れるかは正直便利ならなんでもよかったので、lunarvimに手を出した経緯があります。
しかし、LiveShare必須になりvscodeを使わざるを得ない環境になったので、今はvscodeです。。

vscodeの利点

  • LSPがデフォルト装備
  • プラグイン(拡張機能)がすぐ追加できる
  • 一部の拡張機能は、会社で必須だったりする(LiveShareなど)
  • 一画面内にターミナル、デバッグ操作が可能
  • 普通のエディタにない(?)便利な操作が可能(シンボル、{}や''に合わせて選択範囲を拡大など)
  • ↑↑の便利機能を含めてショートカットキーのカスタムが可能
  • みんな使ってる
  • 他の人と同じ拡張機能を追加できる

デメリットは以下だと思ってます

  • 長いコードの編集にはマウス操作は必要
  • 起動が遅い、動きが重いこともある(pcスペックによるが、vimよりは絶対遅くなる)

vsCode Vimのメリット

vscodeの拡張機能「vsCode Vim」を追加することで、vsCode上である程度のvim操作が可能になります。
これによりマウスを使わずに速いテキスト編集が可能になります。
さらに、vsCodeの利点はそのまま生きるので、便利機能を使い続けることが可能です。

また、一部のデフォルトのショートカットキーは、vimと競合することがあるため、編集が必要です。
vscodeのデフォルトはほぼ全ての修飾キー+文字にショートカットキーが設定されてる気がします(ちゃんと確認してないけど、多分Ctrl+oとか)

以下に、vscodeの便利機能でよく使うショートカットキーを上げていきます
※"<Leader>"はvimの設定です。自分はスペースです。

ショートカットキー 操作 vscodeの変数名 使うタイミング
"<Leader>", "s" ファイル内シンボル検索 workbench.action.gotoSymbol 今開いてるファイルの中の関数名覚えてるけどどこだっけ?
"<Leader>", "r" カーソル上のシンボルをリネーム editor.action.rename すべてのファイルにある変数名を一括で変更したい

(その他、copilotのショートカットなど)

設定方法

設定の仕方は2種類あります。

  1. settings.json
    settings.jsonに設定する場合、beforeに入力キーを入れます。
    そのあと、afterかcommandsのキーを入れます。
    別の入力キーに設定したい場合はafterを、vscodeのコマンドを使いたい場合はcommandsを使います。
settings.json
"vim.normalModeKeyBindings": 
    // ズーム
    {
      "before": ["<leader>", "-"],
      "commands": ["workbench.action.zoomOut"]
    }, // 縮小
    {
      "before": ["<leader>", "+"],
      "commands": ["workbench.action.zoomIn"]
    }, // 拡大
    {
      "before": ["<leader>", "0"],
      "commands": ["workbench.action.zoomReset"]
    }, // リセット
    {
      "after": ["<leader>", "<leader>", "2", "s", "<char>", "<char>"],
      "before": ["s"]
    }, // easymotion2文字->s
    
    // 改行してもノーマルモード
    {
      "after": ["o", "<ESC>"],
      "before": ["o"]
    },
    {
      "after": ["O", "<ESC>"],
      "before": ["O"]
    },
    // ウィンドウ系
    {
      "before": ["<enter>", "<enter>"],
      "commands": ["workbench.action.focusNextGroup"]
    }, // 隣のウィンドウに移動

commandsに入る内容は、

  • コマンドパレット→「キーボードショートカットの切り替えのトラブルシューティング」で出力を開く→使いたいショートカットを使ってみる→出力される
  • vscodeのリファレンスを探す
    で確認できます。
  1. keyboard.json
    コマンドパレット→「キーボードショートカットを開く」で開けます。
    ここでキーボードショートカット設定した内容が一覧できます。
keyboard.json
// ctrl+矢印でサイドバー・エディター・ターミナル移動
  {
    "key": "ctrl+up",
    "command": "workbench.action.focusActiveEditorGroup",
    "when": "terminalFocus"
  },
  {
    "key": "ctrl+k",
    "command": "-workbench.action.focusActiveEditorGroup",
    "when": "terminalFocus"
  },
  {
    "key": "ctrl+right",
    "command": "workbench.action.focusActiveEditorGroup",
    "when": "sideBarFocus"
  },
  {
    "key": "ctrl+l",
    "command": "-workbench.action.focusActiveEditorGroup",
    "when": "sideBarFocus"
  },

commandの値が"-"で始まっているものは、デフォルトから別のショートカットに変更した時、「使えないショートカット」として設定されている場合に入ります。

注意点

vimの編集を一つ戻す(ノーマルモードでu)とvscodeの戻す(ctrl+z)で変な挙動になることがあります。
設定で統一するか、使用するコマンドをどちらかに統一する必要があります。

次に書こうとしてること

自分がvscode vimで設定している内容を書いていこうと思います。
カスタマイズが好きなので、ちょこちょこ変更されることはあるかと思いますが。。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?