VSCode 用のキーの設定を行う拡張機能です。AI Code Editor の Cursor にも対応しています。
Configuration parameter | Description |
---|---|
fc.vscode_target | VSCode 用のキーバインドを利用するアプリケーションソフト(ブラウザアプリを除く)を指定する |
fc.cursor_target | Cursor 用のキーバインドを利用するアプリケーションソフトを指定する |
fc.vscode_browser_target | VS Code Web の画面で VSCode 用のキーバインドを利用するブラウザアプリを指定する |
fc.vscode_prefix_key | 置き換えするプレフィックスキーの組み合わせ(VSCode のキー、Fakeymacs のキー)を指定する(複数指定可) |
fc.cursor_prefix_key | 置き換えするプレフィックスキーの組み合わせ(Cursor のキー、Fakeymacs のキー)を指定する(複数指定可) |
fc.vscode_replace_key | 置き換えするキーの組み合わせ(VSCode のキー、Fakeymacs のキー)を指定する(複数指定可) |
fc.cursor_replace_key | 置き換えするキーの組み合わせ(Cursor のキー、Fakeymacs のキー)を指定する(複数指定可) |
fc.use_ctrl_atmark_for_mark | 日本語キーボードを利用する際、VSCode で C-@ をマーク用のキーとして使うかどうかを指定する |
fc.use_direct_input_in_vscode_terminal | パネルのターミナル内で4つのキー(C-k、C-r、C-s、C-y)のダイレクト入力機能を使うかどうかを指定する |
fc.terminal_list_for_direct_input | ターミナルをエディタ領域で使う際、ダイレクト入力機能を使うターミナルの種類を指定する |
fc.esc_mode_in_keyboard_quit | keyboard_quit 関数コール時の Esc キーの発行方法を指定する |
※ fc.vscode_browser_target 変数は、ブラウザで VS Code Web の画面にアクセスした際(vscode.dev にアクセス したとき等)に、VSCode 用のキーバインドを利用できるようにするための設定です。
※ fc.vscode_prefix_key 変数は、VSCode のプレフィックスキーを使う際、後に入力した文字が全角文字で 入力されることがある問題を対策するために設けた設定です。
※ fc.cursor_prefix_key 変数は、Cursor のプレフィックスキーを使う際、後に入力した文字が全角文字で 入力されることがある問題を対策するために設けた設定です。
※ fc.use_ctrl_atmark_for_mark 変数は、VSCode で C-@ を Toggle Terminal 用のキーとして使えるように するために設けた設定です。 初期値は False としており、C-@ を Toggle Terminal 用のキーとして使えるようにしています。 True に設定した場合でも Toggle Terminal 用のキーとして C-<半角/全角> が使えます。
※ fc.use_direct_input_in_vscode_terminal 変数は初期値を False(使わない)としており、 仕様を理解した方のみ使う機能としています。fc.use_direct_input_in_vscode_terminal 変数を True に した際の仕様については、以降の説明を参照してください。 なお、2025/01/21 に実施したエンハンス対応により、VSCode の settings.json に window.title の設定を 行えば、fc.use_direct_input_in_vscode_terminal 変数を True にする必要がなくなりました。window.title の設定についても以降の説明を参照してください。
※ fc.esc_mode_in_keyboard_quit 変数の設定値には、次のいずれかの値を指定できます。
- 1:Esc キーを常に発行する
- 2:C-g を2回連続して押下した場合に Esc キーを発行する
設定値 2 の利用は、VSCode で Jupyter Notebook を使う場合などを想定しています。 設定値 1 の場合でも、C-A-g キーにより Esc キーを発行しない keyboard_quit を利用できます。
VSCode’s prefix key | Fakeymacs’s prefix key | Description |
---|---|---|
fc.vscode_prefix_key[n][0] の設定値 | fc.vscode_prefix_key[n][1] の設定値 | 初期値:C-k → C-A-k |
※ Fakeymacs のプレフィックスキーを利用することにより、プレフィックスキーの後に入力するキーが 全角文字で入力されることが無くなります。
VSCode’s key | Fakeymacs’s key | Description |
---|---|---|
fc.vscode_replace_key[n][0] の設定値 | fc.vscode_replace_key[n][1] の設定値 | 初期値:無し |
Keybind | Function | VSCode Command | Description |
---|---|---|---|
Ctl-x C-f | find_file | File: Open File… | Fakeymacs 標準機能(参考記載) |
Ctl-x C-d | find_directory | File: Open Folder… | |
Ctl-x C-r | recentf | File: Open Recent… | |
Ctl-x C-l | locate | Go to File… |
Keybind | Function | VSCode Command | Description |
---|---|---|---|
M-g p | previous_error | Go to Previous Problem in Files (Error, Warning, Info) | |
M-g M-p | previous_error | Go to Previous Problem in Files (Error, Warning, Info) | |
M-g n | next_error | Go to Next Problem in Files (Error, Warning, Info) | |
M-g M-n | next_error | Go to Next Problem in Files (Error, Warning, Info) | |
Ctl-x ` | next_error | Go to Next Problem in Files (Error, Warning, Info) |
Keybind | Function | VSCode Command | Description |
---|---|---|---|
Ctl-x k | kill_buffer | View: Close Editor | アプリ版 VSCode であれば、A-k も利用可能 |
Ctl-x b | switch_to_buffer | View: Quick Open Privious Recently Used Editor in Group | |
Ctl-x C-b | list_buffers | View: Show All Editors By Most Recently Used |
Keybind | Function | VSCode Command | Description |
---|---|---|---|
Ctl-x 0 | delete_window | View: Close All Editors in Group | |
Ctl-x 1 | delete_other_windows | View: Close Editors in Other Groups | |
Ctl-x 2 | split_window_below | View: Split Editor Orthogonal | |
Ctl-x 3 | split_window_right | View: Split Editor | |
Ctl-x 4 | rotate_layout | Toggle Vertical/Horizontal Editor Layout | |
Ctl-x o | other_window | View: Navigate Between Editor Groups | |
C-<数字キー> | switch_focus(<数字キーの値>) | View: Focus Side Bar or n-th Editor Group | |
C-A-<数字キー> | switch_focus(<数字キーの値>) | View: Focus Side Bar or n-th Editor Group |
※ C-<数字キー> は、fc.use_ctrl_digit_key_for_digit_argument 変数が False(初期値)の場合に機能します。 True の場合(C-<数字キー> は数引数の指定用として使われる)には、代わりに C-A-<数字キー> が機能する ようにしています。
Keybind | Function | VSCode Command or Command ID | Description |
---|---|---|---|
C-A-p | mark_previous_line | cursorColumnSelectUp | |
C-A-n | mark_next_line | cursorColumnSelectDown | |
C-A-b | mark_backward_char | cursorColumnSelectLeft or cursorLeftSelect | |
C-A-f | mark_forward_char | cursorColumnSelectRight or cursorRightSelect | |
C-A-S-b | mark_backward_word | cursorWordLeftSelect | |
C-A-S-f | mark_forward_word | cursorWordRightSelect | |
C-A-a | mark_beginning_of_line | cursorHomeSelect | |
C-A-e | mark_end_of_line | cursorEndSelect | |
C-A-d | mark_next_like_this | Add Selection To Next Find Match | |
C-A-S-d | mark_all_like_this | Select All Occurrences of Find Match | |
C-A-s | skip_to_next_like_this | Move Last Selection To Next Find Match | |
C-A-S-s | skip_to_previous_like_this | Move Last Selection To Previous Find Match | 多くは C-A-u で代用可 |
C-A-x | expand_region | Expand Selection | |
C-A-S-x | shrink_region | Shrink Selection | 多くは C-A-u で代用可 |
C-A-u | cursor_undo | Cursor Undo | |
C-A-r | cursor_redo | Cursor Redo | |
C-A-g | keyboard_quit2 | - | Esc キーを発行しない keyboard_quit |
※ マルチカーソルを維持したまま選択したリージョンを解除するには、Esc キーを発行しない keyboard_quit(C-A-g)を利用してください。(fc.esc_mode_in_keyboard_quit 変数が 2 の場合は、 連続入力しない C-g を利用することもできます。)
※ 「矩形選択 / マルチカーソル」の機能については、次のページを参考としてください。
- https://www.atmarkit.co.jp/ait/articles/1805/11/news022.html
- https://code.visualstudio.com/docs/editor/codebasics#_column-box-selection
- https://code.visualstudio.com/docs/editor/codebasics#_multiple-selections-multicursor
※ 次の VSCode の Extension をインストールすると、この「矩形選択 / マルチカーソル」の機能が より有用なものとなります。
- https://marketplace.visualstudio.com/items?itemName=dbankier.vscode-quick-select
- https://marketplace.visualstudio.com/items?itemName=tomoki1207.vscode-input-sequence
- https://marketplace.visualstudio.com/items?itemName=Asuka.insertnumbers
キーバインドの設定は次の拡張機能の中で行っています。
Keybind | Function | VSCode Command | Description |
---|---|---|---|
C-~ (C-S-`) | create_terminal | Terminal: Create New Terminal | US Keyboard の場合 |
C-` | toggle_terminal | View: Toggle Terminal | US Keyboard の場合 |
Keybind | Function | VSCode Command | Description |
---|---|---|---|
C-` (C-S-@) | create_terminal | Terminal: Create New Terminal | JIS Keyboard の場合 |
C-@ | toggle_terminal | View: Toggle Terminal | JIS Keyboard の場合 |
C-S-<半角/全角> | create_terminal | Terminal: Create New Terminal | JIS Keyboard の場合 |
C-<半角/全角> | toggle_terminal | View: Toggle Terminal | JIS Keyboard の場合 |
※ C-@ は、fc.use_ctrl_atmark_for_mark 変数が False の場合に機能します。
※ ターミナルで4つのキー(C-k、C-r、C-s、C-y)のダイレクト入力をできるようにするためには、 VSCode の Preferences: Open User Settings (JSON) の機能で settings.json を開き、 次の設定を追加してください。
"window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${appName} - ${focusedView}"
※ fc.use_direct_input_in_vscode_terminal 変数を True にすることでも、同様の機能を利用することが できます。この機能を利用する場合は、上記のいずれかのキーを押下してターミナルに移行するように してください。 ただし、window.title の設定を行う方法の方がマウスでビューを切り替えられるなどメリットが多いため、 fc.use_direct_input_in_vscode_terminal 変数を True にする方法は、非推奨の方法となりました。
※ ターミナルで C-k を利用できるようにするには、VSCode の 設定で terminal.integrated.allowChords を false にする必要があります。
※ bash のターミナルで C-s を利用できるようにするには、bash で stty stop undef の設定をする必要が あります。この設定をしないでこのキーを押下すると stop から戻れなくなりますのでご注意ください。
※ PowerShell のターミナルで emacs キーバインドを使うためには、次のページを参照してください。
※ fc.use_direct_input_in_vscode_terminal 変数を True にしている場合、ターミナルから抜けるには 次のキーを利用するようにしてください。先に説明した4つのキーがターミナル外で機能するキーバインド として認識されるように戻ります。 また、マウスでビューの変更をしたり、ターミナルのシェルを終了してパネルをクロースした場合などに、 現在の場所の認識に齟齬が発生することがあります。 その場合も次のいずれかのキーを押下することにより、Fakeymacs に現在の場所を再認識させるようにして ください。なお、これらの利用上の制約は、window.title の設定を行う方法の場合には発生しません。 このため、fc.use_direct_input_in_vscode_terminal 変数を True にする方法は非推奨となりました。
Keybind | Function | VSCode Command | Description |
---|---|---|---|
C-` | toggle_terminal | View: Toggle Terminal | US Keyboard の場合 |
C-@ | toggle_terminal | View: Toggle Terminal | JIS Keyboard の場合 |
C-<半角/全角> | toggle_terminal | View: Toggle Terminal | JIS Keyboard の場合 |
Ctl-x o | other_window | Navigate Between Editor Groups | |
C-<数字キー> | switch_focus(<数字キーの値>) | Focus Side Bar or n-th Editor Group | |
C-A-<数字キー> | switch_focus(<数字キーの値>) | Focus Side Bar or n-th Editor Group |
Keybind | Function | VSCode Command | Description |
---|---|---|---|
C-A-` | create_terminal_in_editor_area | Terminal: Create New Terminal in Editor Area | US Keyboard の場合 |
C-A-@ | create_terminal_in_editor_area | Terminal: Create New Terminal in Editor Area | JIS Keyboard の場合 |
C-A-<半角/全角> | create_terminal_in_editor_area | Terminal: Create New Terminal in Editor Area | JIS Keyboard の場合 |
※ エディタ領域にターミナルを開く場合には、上記のキーを利用してください。
※ この機能は、fc.terminal_list_for_direct_input 変数に設定しているターミナルに対し、動作します。
Keybind | Function | VSCode Command | Description |
---|---|---|---|
M-x | execute_extended_command | Show All Commands | |
M-; | comment_dwim | Toggle Line Comment | |
C-’ | trigger_suggest | Trigger Suggest | US Keyboard の場合 |
C-: | trigger_suggest | Trigger Suggest | JIS Keyboard の場合 |
※ Meta(M-)で Esc を利用したい場合には、fc.use_esc_as_meta 変数を True にしてください。 True にした場合に Esc を入力するには、Esc を二回押下してください。
※ IntelliSense の機能については、次のページを参考としてください。
Cursor を利用する場合、AI のインラインアシスタント機能を起動するショートカットキー Ctrl+k が Emacs キーバインドと重複するため、キーの変更が必要となります。 Cursor の Preferences: Open Keyboard Shortcuts (JSON) の機能で keybindings.json を開き、次の設定 (Ctrl+k を Ctrl+e に変更する設定)をマージしてください。本拡張機能は、Cursor にこの設定がマージ されていることを前提に、調整が行われています。
// Place your key bindings in this file to override the defaults [ { "key": "ctrl+k", "command": "-aipopup.action.modal.generate", "when": "editorFocus && !composerBarIsVisible && !composerControlPanelIsVisible" }, { "key": "ctrl+e", "command": "aipopup.action.modal.generate", "when": "editorFocus && !composerBarIsVisible && !composerControlPanelIsVisible" }, { "key": "ctrl+k", "command": "-cursorai.action.generateInTerminal", "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" }, { "key": "ctrl+e", "command": "cursorai.action.generateInTerminal", "when": "terminalFocus && terminalHasBeenCreated || terminalFocus && terminalProcessSupported" } ]
また、Cursor には VSCode 用のキーマップ keymap_vscode が適用される他に、Cursor 用のキーマップ keymap_cursor が適用されます。このキーマップでは、次の設定により、キーの置き換えが可能となっています。
Cursor’s prefix key | Fakeymacs’s prefix key | Description |
---|---|---|
fc.cursor_prefix_key[n][0] の設定値 | fc.cursor_prefix_key[n][1] の設定値 | 初期値:C-m → C-A-m |
※ Fakeymacs のプレフィックスキーを利用することにより、プレフィックスキーの後に入力するキーが 全角文字で入力されることが無くなります。
※ Cursor では、VSCode の Ctrl+k キーとは別に、Ctrl+m キーもプレフィックスキーとして利用されます。
Cursor’s key | Fakeymacs’s key | Description |
---|---|---|
fc.cursor_replace_key[n][0] の設定値 | fc.cursor_replace_key[n][1] の設定値 | 初期値:C-e → C-A-e、C-l → C-A-l |
※ Cursor では、AI の機能を追加するために新たなショートカットキーが追加されています。 これらのショートカットキーは Fakeymacs で設定している Emacs キーバインドと重複するものがあるため、 fc.cursor_replace_key 変数の設定により、キーの置き換えができるようにしています。 なお、Fakeymacs では、C-q を前置するか、fc.side_of_ctrl_key で設定した側でない Ctrl キーを使う 方法でも Windows のショートカットキーを入力することが可能です。 このため、本設定は、利用頻度の高いキーの置き換えに使用するのが良いと思われます。
VSCode 用キーマップにキーを定義する
def define_key_v(keys, command, skip_check=True):
Parameter | Description |
---|---|
keys | 設定するキー(マルチストロークのキーはスペースで区切る) |
command | 実行するコマンド(関数) |
skip_check | キー設定のスキップ判定を行うかどうかを指定する |
- 無し
VSCode のコマンドを実行する関数を返す
def vscodeExecuteCommand(command, esc=False):
Parameter | Description |
---|---|
command | VSCode の Command Palette で実行するコマンドの文字列(短縮形の場合も有り) |
esc | コマンドが実行できない時にコマンドパレットの表示を消すための ESC を入力するかを指定する |
- 引数で指定したコマンドを実行する関数
本拡張機能では、さらに以下の拡張機能が利用できます。
Extension name | Description |
---|---|
vscode_extensions | VSCode Extension 用のキーの設定を行う |
● 本フォルダにある _config_personal.py を config_personal.py というファイル名にすることで、 機能拡張ファイルとして機能します。vscode_key Extension の機能を拡張する際にご利用ください。 また、上記で説明している拡張機能(vscode_extensions)もこの機能拡張ファイルの中から読み込まれます。
● fc.side_of_ctrl_key 変数で設定した側でない Ctrl キーを使う、C-q を前置する、fc.vscode_prefix_key 変数や fc.cursor_prefix_key 変数で指定した Fakeymacs 用のプレフィックスキーを使うことで、 VSCode 本来のショートカットキーを入力することもできます。 VSCode のショートカットキーは、次のページで詳しく紹介されています。
● vscodeExecuteCommand 関数内では日本語入力モードの切り替えを行っているのですが、Google 日本語入力を利用して入力モードのポップアップを表示する設定にしている場合、このポップアップが 何度も表示される症状が発生するようです。このため、ポップアップを非表示にする設定にしてご利用 ください。
● ブラウザで vscode.dev を指定した際などに開く VS Code Web の画面では、C-F4 がブラウザ側 でキャッチされ、ブラウザのタブを閉じようとしてしまいます。 このため、VS Code Web 画面で Ctl-x k を実行した場合には、コマンドパレットで View: Close Editor を実行するようにし、VS Code Web 側の機能が働くようにしています。 M-k は 従来どおり C-F4 を発行するのみの機能としていますので、VS Code Web を利用する場合 には、M-k と Ctl-x k を使い分けるようにしてください。
● ブラウザで vscode.dev を指定した際などに開く VS Code Web の画面では、C-Tab がブラウザ側 でキャッチされ、ブラウザのタブを切り替えてしまいます。 このため、VS Code Web 画面で Ctl-x b を実行した場合には、コマンドパレットで View: Quick Open Privious Recently Used Editor in Group を実行するようにし、VS Code Web 側の機能が働く ようにしています。 C-Tab は 従来どおりブラウザで機能しますので、VS Code Web を利用する場合には、C-Tab と Ctl-x b を使い分けるようにしてください。
● Google Chrome を利用している場合、次のサイトに記載のある方法で VS Code Web の画面の ショートカットを「ウィンドウで開く」オプション付きで作成すると、先の2つの問題を回避する ことができます。お試しください。
● Micorosoft Edge を利用している場合、次のサイトに記載のある方法で VS Code Web の画面を アプリ化すると、先の2つの問題を回避することができます。お試しください。
● proxy サーバ配下の環境にある PC で Remote-WSL を使った場合、WSL に接続するまでに時間が 掛かる問題が発生していました。次のページで紹介してある設定を行ったところ改善しましたので、 紹介しておきます。
● VSCode の検索機能では、検索した後にカーソルを移動して再度検索を行うと、検索する文字列が 移動したカーソルの場所にある単語に置き換えられてしまいます。 この挙動を抑制する方法が、次のページに書かれています。