見出し画像

VSCode で Emacs キーバインドを使いながら、更に Windows コピペ(Ctrl-X,-C,-V)を使いたい!!!

90年代に UNIX 系機器で emacs/mule を使い、00年代以降 Windows 上で xyzzy を使い、その際に Windows のコピペショートカットの便利さから、 winkey.l を導入してしまったため、指がそういうキーバインドに慣れてしまっている作者のような異端が vscode を使うための情報記事です。

キーバインド

基本方針は、Awesom Emacs Keymap を導入して、テキスト範囲選択がある、なしで通常の emacs のコマンドと Windows コピペ操作のキーバインドを切り替えるというものです。具体的には以下のようにキーバインドを変更しています。

  • テキスト範囲選択の有無にかかわらず、

    • Ctrl-V で、emacs ペースト(Ctrl-Y)動作

  • テキスト範囲選択部分があった場合、

    • Ctrl-X で、emacs カット(Ctrl-W)動作

    • Ctrl-C で、emacs コピー(ALT-W)動作

  • テキスト範囲選択部分がなかった場合、

    • Ctrl-X で、C-X で始まる emacs コマンド群を開始 (Ctrl-X Ctrl-S でセーブとか)

    • Ctrl-X Ctrl-V で、ページダウン(Ctrl-Vの代替、個人的には PageDownキーを使うのでこちらはあまり使わない)

    • Ctrl-X Ctrl-A で、全選択 (Windowsでの全選択 Ctrl-A)動作

    • Ctrl-C で、カーソル位置のワードをコピー(Copy Word in Cursor)動作

Copy Word in Cursor は Ctrl-C にアサインすると便利なので使っています。Ctrl-C を押すとカーソル位置のワードをコピーしつつ、そのままワード範囲が選択されるので、更に Ctrl-X を押して消すことも可能です。

導入方法

まず vscode に、以下のプラグインを導入します。

  • Awesome Emacs Keymap

  • Copy Word in Cursor

作者の方々に感謝します。

導入したら、次にキーバインド設定ファイルを書き換えます。

[ファイル] > [ユーザー設定] > [キーボードショートカット]を開いて、右上の json 出力のアイコンを押します。下図の赤い矢印の先の丸で囲ったところです。

keybindings.json を開くアイコン

keybindings.json が開きますので、その内容を以下のように書き換えます。

// 既定値を上書きするには、このファイル内にキー バインドを挿入します
[
        // Plugin: Awesome Emacs Keymap
        {
                "key": "ctrl+c",
                "command": "emacs-mcx.copyRegion",
                "when": "editorTextFocus && editorHasSelection"
        },
        {
                "key": "ctrl+c",
                "command": "-editor.action.clipboardCopyAction"
        },
        {
                "key": "ctrl+v",
                "command": "emacs-mcx.yank",
                "when": "editorTextFocus && !editorReadonly"
        },
        {
                "key": "ctrl+v",
                "command": "-emacs-mcx.scrollUpCommand",
                "when": "editorTextFocus && !suggestWidgetVisible"
        },
        {
                "key": "ctrl+x",
                "command": "emacs-mcx.killRegion",
                "when": "editorTextFocus && editorHasSelection && !editorReadonly"
        },
        // Plugin: Copy Word in Cursor
        {
                "key": "ctrl+c",
                "command": "copy-word.copy",
                "when": "!editorHasSelection && editorTextFocus"
        },
        // General
        {
                "key": "ctrl+x ctrl+a",
                "command": "editor.action.selectAll",
                "when": "editorTextFocus && !editorHasSelection"
        },
        {
                "key": "ctrl+x ctrl+v",
                "command": "emacs-mcx.scrollUpCommand",
                "when": "editorTextFocus && !editorHasSelection && !suggestWidgetVisible"
        }
]

これで使えるようになっているはずです。

メタキーとして ESC を使いたい場合は、Awesome VSCode KeyMap の設定の
emacs-mcx.useMetaPrefixEscape を true に設定してください。

アクセスしていただき、ありがとうございました。

いいなと思ったら応援しよう!