Sworld

Sworld

The only way to do great work is to love what you do.

Github Copilotの補完の衝突を解決する

最近、Github Copilot を使用しているときに、NES(Next Edit Suggestions)の補完に直面した際、Tab キーを押すと目的の位置に移動するのではなく、スペースが挿入されることがよくあることに気付きました。調査の結果、これは VSCode の Tab キーのバインディングの競合によるものであることがわかりました。本記事ではその解決方法を記録します。

エラーの現象#

Github Copilot を使用してコード補完を行う際、Tab キーを押しても補完提案の位置に移動せず、スペースが挿入されてしまい、補完提案をスムーズに受け入れることができません。以下の図のようになります:

生成されたヒント
Tab 後にスペースが生成される

デバッグの考え方#

まず、VSCode のキーボードショートカットデバッグ機能を起動し、Ctrl + Shift + Pを押してshortcut troubleshootingを検索し、ショートカットデバッグパネルを開きます。

check1

以下のような情報が表示されます:

check2

2025-10-18 15:58:06.749 [info] [ウィンドウ] [KeybindingService]: / Received  keydown event - modifiers: [], code: Tab, keyCode: 9, key: Tab
2025-10-18 15:58:06.749 [info] [ウィンドウ] [KeybindingService]: | Converted keydown event - modifiers: [], code: Tab, keyCode: 2 ('Tab')
2025-10-18 15:58:06.749 [info] [ウィンドウ] [KeybindingService]: | Resolving Tab
2025-10-18 15:58:06.749 [info] [ウィンドウ] [KeybindingService]: \ From 14 keybinding entries, matched tabout, when: editorTextFocus && !editorHasMultipleSelections && !inSnippetMode && !inlineSuggestionVisible && !suggestWidgetVisible, source: user extension albert.TabOut.
2025-10-18 15:58:06.749 [info] [ウィンドウ] [KeybindingService]: + Invoking command tabout.

明らかに、Tab キーはTabOutプラグインによって占有されています。

解決方法#

この時、Ctrl + K Ctrl + Sを使用してキーボードショートカット設定を開き、"Tab"を検索してTabOut: Tab Outを見つけ、右側のゴミ箱アイコンをクリックしてそのショートカットバインディングを削除します。

しかし、より良い方法もあります。それは、TabOutプラグインに条件を設定し、Github Copilot の補完提案が表示されているときに無効にすることです。when条件の末尾に!inlineEditIsVisible条件を追加することで、最終的にこの条件editorTextFocus && !editorHasMultipleSelections && !inSnippetMode && !inlineSuggestionVisible && !suggestWidgetVisible && !inlineEditIsVisibleを得ることができます(編集後に Enter を押して保存)。

これで、正常に補完ができるようになります:

example3

example4

終了後、再度Ctrl + Shift + Pを押してshortcut troubleshootingを検索し、ショートカットデバッグパネルを閉じます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。