{"id":16200293,"url":"https://github.com/whitphx/vscode-emacs-mcx","last_synced_at":"2026-04-09T06:04:00.204Z","repository":{"id":37790171,"uuid":"164272151","full_name":"whitphx/vscode-emacs-mcx","owner":"whitphx","description":"Awesome Emacs Keymap - VSCode emacs keybinding with multi cursor support","archived":false,"fork":false,"pushed_at":"2024-10-09T21:50:35.000Z","size":4435,"stargazers_count":371,"open_issues_count":63,"forks_count":64,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-10-11T09:29:58.503Z","etag":null,"topics":["emacs","hacktoberfest","vscode","vscode-extension"],"latest_commit_sha":null,"homepage":"https://marketplace.visualstudio.com/items?itemName=tuttieee.emacs-mcx","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whitphx.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-06T03:30:42.000Z","updated_at":"2024-10-04T20:12:01.000Z","dependencies_parsed_at":"2023-09-24T18:14:56.165Z","dependency_job_id":"79c17d21-4ad6-465e-8f51-e1f2cc9aa5da","html_url":"https://github.com/whitphx/vscode-emacs-mcx","commit_stats":null,"previous_names":["tuttieee/vscode-emacs-mcx"],"tags_count":176,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whitphx%2Fvscode-emacs-mcx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whitphx%2Fvscode-emacs-mcx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whitphx%2Fvscode-emacs-mcx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whitphx%2Fvscode-emacs-mcx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whitphx","download_url":"https://codeload.github.com/whitphx/vscode-emacs-mcx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247801170,"owners_count":20998339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emacs","hacktoberfest","vscode","vscode-extension"],"created_at":"2024-10-10T09:29:49.017Z","updated_at":"2026-04-09T06:04:00.196Z","avatar_url":"https://github.com/whitphx.png","language":"TypeScript","funding_links":["https://www.buymeacoffee.com/whitphx","https://ko-fi.com/D1D2ERWFG","https://github.com/sponsors/whitphx"],"categories":["TypeScript"],"sub_categories":[],"readme":"# Awesome Emacs Keymap (emacs-mcx)\n\n[![Test and Build](https://github.com/whitphx/vscode-emacs-mcx/actions/workflows/test-build.yml/badge.svg)](https://github.com/whitphx/vscode-emacs-mcx/actions/workflows/test-build.yml)\n[![Post-build](https://github.com/whitphx/vscode-emacs-mcx/actions/workflows/post-build.yml/badge.svg)](https://github.com/whitphx/vscode-emacs-mcx/actions/workflows/post-build.yml)\n\n[![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/v/tuttieee.emacs-mcx?label=Visual%20Studio%20Marketplace)](https://marketplace.visualstudio.com/items?itemName=tuttieee.emacs-mcx)\n[![Visual Studio Marketplace Installs - Azure DevOps Extension](https://img.shields.io/visual-studio-marketplace/azure-devops/installs/total/tuttieee.emacs-mcx)](https://marketplace.visualstudio.com/items?itemName=tuttieee.emacs-mcx)\n[![Visual Studio Marketplace Rating](https://img.shields.io/visual-studio-marketplace/r/tuttieee.emacs-mcx)](https://marketplace.visualstudio.com/items?itemName=tuttieee.emacs-mcx\u0026ssr=false#review-details)\n\n[![Open VSX Version](https://img.shields.io/open-vsx/v/tuttieee/emacs-mcx)](https://open-vsx.org/extension/tuttieee/emacs-mcx)\n[![Open VSX Downloads](https://img.shields.io/open-vsx/dt/tuttieee/emacs-mcx)](https://open-vsx.org/extension/tuttieee/emacs-mcx)\n[![Open VSX Rating](https://img.shields.io/open-vsx/rating/tuttieee/emacs-mcx)](https://open-vsx.org/extension/tuttieee/emacs-mcx/reviews)\n\n\u003ca href=\"https://flatt.tech/oss/gmo/trampoline\" target=\"_blank\"\u003e\u003cimg src=\"https://flatt.tech/assets/images/badges/gmo-oss.png\" height=\"20px\"/\u003e\u003c/a\u003e\n\n\u003ca href=\"https://www.buymeacoffee.com/whitphx\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" width=\"180\" height=\"50\" \u003e\u003c/a\u003e\n\u003ca href=\"https://ko-fi.com/D1D2ERWFG\" target=\"_blank\"\u003e\u003cimg src=\"https://storage.ko-fi.com/cdn/brandasset/kofi_button_red.png\" alt=\"Support me on Ko-fi\" width=\"180\" \u003e\u003c/a\u003e\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/whitphx?label=Sponsor%20me%20on%20GitHub%20Sponsors\u0026style=social)](https://github.com/sponsors/whitphx)\n\n**Emacs emulation for Visual Studio Code**\n\n- Emacs-like cursor movements and editing commands\n- Customizable meta key assignment (`alt`, `ESC`, `ctrl+[`, or `command` on macOS)\n- Shift-selection with movement commands\n- Search behavior like Emacs' isearch\n- Compatibility with VSCode's built-in multi cursor feature\n- Kill-ring integrated with the system clipboard\n- Mark-ring\n- Prefix argument\n- Rectangle commands\n- Text/position/rectangle registers\n- Sexp operations (with ParEdit commands)\n- Available both in Desktop and [Web](https://code.visualstudio.com/api/extension-guides/web-extensions)\n\nIt's inspired by [Emacs Keymap by hiro-sun](https://github.com/hiro-sun/vscode-emacs) and its forks such as [Emacs Friendly Keymap by Sebastian Zaha](https://github.com/SebastianZaha/vscode-emacs-friendly), [Emacs Keymap Improved by rkwan94](https://github.com/rkwan94/vscode-emacs), and [Emacs Friendly Keybindings (Neon) by NotKyon](https://github.com/NotKyon/vscode-emacs-neon), but totally revamped and improved for better feature coverage, Emacs emulation, and usability (also getting rid of some bugs).\n\n## FAQ/Tips\n\n### The cursor cannot be moved on the find widget as the widget closes with movement keys.\n\nIt's an intended design that simulates the original Emacs' behavior.\nYou can disable it with `emacs-mcx.cursorMoveOnFindWidget` option described below.\nSee https://github.com/whitphx/vscode-emacs-mcx/issues/137 for the details about this topic.\n\n### i-search (`C-s`) is initialized with the currently selected string and the previous search is removed.\n\nSetting `editor.find.seedSearchStringFromSelection` as `\"never\"` can change this behavior.\nIt makes the find widget work similarly to Emacs.\n\nRefs:\n\n- [The official doc about `editor.find.seedSearchStringFromSelection` setting](basics#_seed-search-string-from-selection)\n- [The GitHub issue where we discuss about it](https://github.com/whitphx/vscode-emacs-mcx/issues/107)\n\n### I want to customize the META key (`ESC`, `ctrl+[`, `alt`, or Command (⌘) key on macOS).\n\nYou can configure the key to be used as a META prefix with the following settings.\n\n- `emacs-mcx.useMetaPrefixAlt` (`true` by default)\n- `emacs-mcx.useMetaPrefixEscape`\n- `emacs-mcx.useMetaPrefixCtrlLeftBracket`\n- `emacs-mcx.useMetaPrefixMacCmd`\n\nRead [the extension settings section](#extension-settings) below for more details.\n\n### I want to use keyboard macro\n\nCheck out [Keyboard Macro Beta](https://marketplace.visualstudio.com/items?itemName=tshino.kb-macro) by [tshino](https://github.com/tshino) (`tshino.kb-macro`) and [its keybindings](https://github.com/tshino/vscode-kb-macro/blob/main/keymap-wrapper/tuttieee.emacs-mcx.json).\n\n### The extension has been broken!\n\nTry the `Developer: Reinstall Extension...` command from the command palette to reinstall the extension. I fixed [a problem](https://github.com/whitphx/vscode-emacs-mcx/issues/1654) by this way somehow.\n\n### I find a bug. I want a feature X to be implemented. I have a question.\n\nPost a bug report or a feature request to [GitHub Issues](https://github.com/whitphx/vscode-emacs-mcx/issues).\n\n## Extension settings\n\nThis extension has some custom settings named with a prefix `emacs-mcx`.\nYou can configure those settings.\n(See [this page](https://code.visualstudio.com/docs/getstarted/settings#_settings-editor) to know how to change the settings.)\n\nConfigurable options of this extension are the followings.\n\n### `emacs-mcx.moveBeginningOfLineBehavior`\n\nDetermines the behavior of the `move-beginning-of-line` command.\nIf set as `'vscode'`, it works as VSCode's native `Home` key behavior.\nIf set as `'emacs'`, it works as the original Emacs' `move-beginning-of-line`.\n\n### `emacs-mcx.moveEndOfLineBehavior`\n\nDetermines the behavior of the `move-end-of-line` command.\nIf set as `'vscode'`, it works as VSCode's native `End` key behavior.\nIf set as `'emacs'`, it works as the original Emacs' `move-end-of-line`.\n\n### `emacs-mcx.scrollUpCommandBehavior`\n\nDetermines the behavior of the `scroll-up-command` command.\nIf set as `'vscode'`, it works as VSCode's native `Page Down` key behavior.\nIf set as `'emacs'`, it works as the original Emacs' `scroll-up-command`.\n\n### `emacs-mcx.scrollDownCommandBehavior`\n\nDetermines the behavior of the `scroll-down-command` command.\nIf set as `'vscode'`, it works as VSCode's native `Page Up` key behavior.\nIf set as `'emacs'`, it works as the original Emacs' `scroll-down-command`.\n\n### `emacs-mcx.wordNavigationStyle`\n\nDetermines the behavior of word navigation and word killing commands such as `forward-word`, `backward-word`, `kill-word`, and `backward-kill-word`.\nIf set as `'vscode'` (default), they work as VSCode's native word navigation.\nIf set as `'emacs'`, they follow Emacs-like word boundary detection.\n\n### ~~`emacs-mcx.strictEmacsMove`~~ (deprecated)\n\n~~If set as `true`, all `emacs-mcx.moveBeginningOfLineBehavior`, `emacs-mcx.moveEndOfLineBehavior`, `emacs-mcx.scrollUpCommandBehavior`, and `emacs-mcx.scrollDownCommandBehavior` are set to `'emacs'`.~~\n\n### `emacs-mcx.keepCursorInVisibleRange`\n\nIf set as true, the cursor is kept in the visible range when scrolling up or down like Emacs.\n\n### `emacs-mcx.emacsLikeTab`\n\nIf set as true, `tab` key works as the Emacs' `tab-to-tab-stop` command.\n\n### `emacs-mcx.useMetaPrefixEscape`\n\nIf set as true, Escape key works as the Meta prefix like original Emacs.\nIf set as false, Escape key works as cancel, the VSCode's native behavior.\nFor example, if set as true, `M-f` (forward-word) can be issued by both `alt+f` and `escape f`.\n\nThe only exception is the commands which begin with `M-g` (`M-g g`, `M-g n`, `M-g p`).\nIt is because VSCode can handle only up to two key strokes as the key bindings.\nSo, as the special case, `Escape g` works as follows.\n\n| Command    | Desc                           |\n| ---------- | ------------------------------ |\n| `Escape g` | Jump to line (command palette) |\n\n### `emacs-mcx.useMetaPrefixCtrlLeftBracket`\n\nIf set as true, `ctrl+[` works as the Meta prefix like original Emacs.\n\n### `emacs-mcx.useMetaPrefixAlt`\n\nIf set as true, `alt` key (`option` (⌥) key on macOS) works as the Meta prefix.\n\n### `emacs-mcx.useMetaPrefixMacCmd`\n\nIf set as true, Command (⌘) key works as the Meta prefix on macOS.\nThis option only works on macOS.\n\n### `emacs-mcx.killRingMax`\n\nConfigures the maximum number of kill ring entries.\nThe default is 60.\n\n### `emacs-mcx.killWholeLine`\n\nThis simulates the original Emacs' [`kill-whole-line` variable](https://www.gnu.org/software/emacs/manual/html_node/emacs/Killing-by-Lines.html).\nThe default is false.\n\n### `emacs-mcx.cursorMoveOnFindWidget`\n\nIf set to true, cursor move commands of this extension such as `C-f` and `C-b` are disabled when the find widget is focused, to allow the widget to keep open and the cursor to move on it.\n\n### `emacs-mcx.enableOverridingTypeCommand`\n\nPrefix arguments do not work on character inputs with IMEs by default and you can set this config to `true` in order to enable it.\nNote that this config makes use of VSCode API's `type` command under the hood and can cause problems in some cases.\n\n- If you are using IME, text input may sometimes fail.\n- If another extension that also uses the `type` command is installed, an error occurs (See https://github.com/Microsoft/vscode/issues/13441).\n\n### `emacs-mcx.enableDigitArgument`\n\nIndicates whether `M-\u003cdigit\u003e` (the `emacs-mcx.digitArgument` command) is enabled.\nSet `false` when `M-\u003cdigit\u003e` conflicts with some other necessary commands. See https://github.com/whitphx/vscode-emacs-mcx/issues/1208 for the background.\n\n### `emacs-mcx.shiftSelectMode`\n\nToggle Shift Selection (Emacs `shift-select-mode`). When `true`, holding Shift while running movement commands starts mark mode to extend the selection; the default is `false` to avoid `ctrl+shift+p` conflicts with the Command Palette on Windows/Linux.\n\n### `emacs-mcx.lineMoveVisual`\n\nWhen true, line-move moves point by visual lines (same as an Emacs variable line-move-visual).\n\n### `emacs-mcx.paredit.parentheses`\n\nKey-value pairs of parentheses to be used in the ParEdit commands like the following example.\n\n```json\n{\n  \"[\": \"]\",\n  \"(\": \")\",\n  \"{\": \"}\"\n}\n```\n\nThe parentheses pairs are inherited from a default configuration and merged in order: Default → User-defined global config → User-defined per-language. Each finer-grained config can override individual pair definitions from its parent.\nYou can also override the default pairs or disable them by setting `null` as the value. For example:\n\n```json\n\"emacs-mcx.paredit.parentheses\": {\n  \"\u003c\": \"\u003e\",  // New pair\n  \"{\": null,  // Override to disable\n}\n// This will result in the following configuration for files of the language:\n// {\n//   \"[\": \"]\",\n//   \"(\": \")\",\n//   \"\u003c\": \"\u003e\"\n// }\n```\n\n### `emacs-mcx.subwordMode`\n\nWhen true, word-oriented move and edit commands, including M-f, M-b, M-d will\nrecognize subwords (same as the Emacs variable `subword-mode`).\nIt can also be set as per-language flag, for example:\n\n```json\n\"[go]\": {\n  \"emacs-mcx.subwordMode\": true\n}\n```\n\n### `emacs-mcx.debug.*`\n\nConfigurations for debugging.\n\n## 'when' clause context\n\nThis extension provides some contexts that you can refer to in `\"when\"` clauses of your `keybindings.json`.\n\n### `emacs-mcx.inMarkMode`\n\n_boolean_\n\nThis indicates whether mark-mode is enabled.\n\n### `emacs-mcx.acceptingArgument`\n\n_boolean_\n\nThis indicates the editor is accepting argument input following `C-u`.\n\n### `emacs-mcx.prefixArgumentExists` (experimental)\n\n_boolean_\n\nThis indicates if a prefix argument exists.\nUse this boolean context to check the existence of a prefix argument, instead of using `emacs-mcx.prefixArgument` with null check.\n\n### `emacs-mcx.prefixArgument` (experimental)\n\n_number | undefined_\n\nThis is a currently input prefix argument.\n\n## Keybindings\n\nAlt key is mapped to the Meta prefix (`M`) by default and you can configure for Escape, `ctrl+[`, or Command (⌘) key (macOS only) to work as it with the settings above.\n\n### Move commands\n\n| Command                                      | Prefix argument | Desc                                                                                                   |\n| -------------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------ |\n| `C-f`                                        | ✓               | Move forward (forward-char)                                                                            |\n| `C-b`                                        | ✓               | Move backward (backward-char)                                                                          |\n| `C-n`                                        | ✓               | Move to the next line (next-line)                                                                      |\n| `C-p`                                        | ✓               | Move to the previous line (previous-line)                                                              |\n| `C-a`                                        | ✓               | Move to the beginning of line (move-beginning-of-line)                                                 |\n| `C-e`                                        | ✓               | Move to the end of line (move-end-of-line)                                                             |\n| `M-f`                                        | ✓               | Move forward by one word unit (forward-word)                                                           |\n| `M-b`                                        | ✓               | Move backward by one word unit (backward-word)                                                         |\n| `C-\u003cright\u003e`, `M-\u003cright\u003e`                     | ✓               | This command (right-word) behaves like `M-f`                                                           |\n| `C-\u003cleft\u003e`, `M-\u003cleft\u003e`                       | ✓               | This command (left-word) behaves like `M-b`                                                            |\n| `M-m`                                        |                 | Move (forward or back) to the first non-whitespace character on the current line (back-to-indentation) |\n| `C-v`                                        | ✓               | Scroll down by one screen unit (scroll-up-command)                                                     |\n| `M-v`                                        | ✓               | Scroll up by one screen unit (scroll-down-command)                                                     |\n| `M-S-[` (`M-{` with US keyboard), `C-\u003cup\u003e`   | ✓               | Move back to previous paragraph beginning (backward-paragraph)                                         |\n| `M-S-]` (`M-}` with US keyboard), `C-\u003cdown\u003e` | ✓               | Move forward to next paragraph end (forward-paragraph)                                                 |\n| `M-S-,` (`M-\u003c` with US keyboard)             |                 | Move to the top of the buffer (beginning-of-buffer)                                                    |\n| `M-S-.` (`M-\u003e` with US keyboard)             |                 | Move to the end of the buffer (end-of-buffer)                                                          |\n| `M-g g` (`M-g M-g`)                          | ✓               | Read a number n and move point to the beginning of line number n (goto-line)                           |\n| `M-g n` (`M-g M-n`, ``C-x ` ``)              |                 | Jump to next error                                                                                     |\n| `M-g p` (`M-g M-p`)                          |                 | Jump to previous error                                                                                 |\n| `C-l`                                        |                 | Center screen on current line (recenter-top-bottom)                                                    |\n\n### Search Commands\n\n| Command                              | Desc                                                                                                                  |\n| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |\n| `C-s`                                | Incremental search forward (isearch-forward).                                                                         |\n| `C-r`                                | Incremental search backward (isearch-backward).                                                                       |\n| `C-M-s`                              | Begin incremental regexp search (isearch-forward-regexp).                                                             |\n| `C-M-r`                              | Begin reverse incremental regexp search (isearch-backward-regexp).                                                    |\n| `M-S-5` (`M-%` with US keyboard)     | Replace (query-replace)                                                                                               |\n| `C-M-S-5` (`C-M-%` with US keyboard) | Replace with regexp (query-replace-regexp)                                                                            |\n| `C-M-n`                              | Add selection to next find match                                                                                      |\n| `C-M-p`                              | Add selection to previous find match                                                                                  |\n| `M-s o`                              | Open [Quick Search](https://code.visualstudio.com/updates/v1_89#_quick-search), which is like Emacs' `occur` command. |\n| `M-c`                                | Toggles the case sensitivity of the find widget.                                                                      |\n\n### Edit commands\n\n| Command                                          | Prefix argument | Desc                                                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| ------------------------------------------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `C-d`                                            | ✓               | Delete right (DEL)                                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| `C-h`                                            | ✓               | Delete left (BACKSPACE)                                                                                                                                                                                                                                                                                                                                                                                                                                            |\n| `M-\\`                                            | ✓               | Delete spaces and tabs around point (delete-horizontal-space).                                                                                                                                                                                                                                                                                                                                                                                                     |\n| `M-SPC`                                          | ✓               | Cycle spacing: first reduces whitespace to one space, then deletes all whitespace, then restores original (cycle-spacing). `alt+space` is ignored by VSCode ([issue](https://github.com/microsoft/vscode/issues/199984)), so this keybinding only works with other Meta key options (Escape, Ctrl+[, or Cmd on macOS), which need to be enabled via `emacs-mcx.useMetaPrefixEscape`, `emacs-mcx.useMetaPrefixCtrlLeftBracket`, or `emacs-mcx.useMetaPrefixMacCmd`. |\n| `C-x C-o`                                        |                 | Delete blank lines around (delete-blank-lines)                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| `C-t`                                            | ✓               | Transpose characters (transpose-chars).                                                                                                                                                                                                                                                                                                                                                                                                                            |\n| `C-x C-t`                                        | ✓               | Transpose lines (transpose-lines).                                                                                                                                                                                                                                                                                                                                                                                                                                 |\n| `M-S-6` (`M-^` with US keyboard)                 |                 | join two lines cleanly (delete-indentation)                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| `M-d`                                            | ✓               | Kill the next word (kill-word).                                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| `M-Bksp`                                         | ✓               | Kill one word backwards (backward-kill-word).                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| `M-z`                                            | ✓               | Kill up to and including the given character (zap-to-char).                                                                                                                                                                                                                                                                                                                                                                                                        |\n| `C-k`                                            | ✓               | Kill rest of line or one or more lines (kill-line).                                                                                                                                                                                                                                                                                                                                                                                                                |\n| `C-S-Bksp`                                       |                 | Kill an entire line at once (kill-whole-line).                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| `C-w`                                            |                 | Kill the region (kill-region).                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| `M-w`                                            |                 | Copy the region into the kill ring (kill-ring-save).                                                                                                                                                                                                                                                                                                                                                                                                               |\n| (unassigned) `emacs-mcx.updateKillRingSave`      |                 | Replace the current kill ring entry with the region (kill-new with REPLACE).                                                                                                                                                                                                                                                                                                                                                                                       |\n| `C-y`                                            | ✓               | Yank the last kill into the buffer, at point (yank).                                                                                                                                                                                                                                                                                                                                                                                                               |\n| `M-y`                                            | ✓               | Either replace the text just yanked with an earlier batch of killed text (yank-pop), or allow selecting from the list of previously-killed batches of text.                                                                                                                                                                                                                                                                                                        |\n| `C-c y`                                          |                 | Browse kill ring                                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| `C-o`                                            |                 | Open line                                                                                                                                                                                                                                                                                                                                                                                                                                                          |\n| `C-j`                                            | ✓               | New line                                                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| `C-m`                                            | ✓               | New line                                                                                                                                                                                                                                                                                                                                                                                                                                                           |\n| `C-x h`                                          |                 | Select All                                                                                                                                                                                                                                                                                                                                                                                                                                                         |\n| `C-x u`, `C-/`, `C-S--` (`C-_` with US keyboard) |                 | Undo                                                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| `C-;`                                            |                 | Toggle line comment in and out                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| `M-;`                                            |                 | Toggle region comment in and out                                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| `C-x C-l` (`M-l`)                                |                 | Convert to lower case (On the Emacs' original behavior, `C-x C-l` and `M-l` are assigned to the different functionalities. However, this extension assigns these keys to the same `emacs-mcx.transformToLowercase` command which calls `editor.action.transformToLowercase` command internally and works similarly to both the original Emacs' functionalities based on the context. Upper case and title case (below) are same)                                   |\n| `C-x C-u` (`M-u`)                                |                 | Convert to upper case                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| `M-c`                                            |                 | Convert to title case                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n\n## Mark Commands\n\n| Command                                   | Desc                                                                                                         |\n| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------ |\n| `C-SPC`, `C-S-2` (`C-@` with US keyboard) | Set the mark at point, and activate it (set-mark-command).                                                   |\n| `C-SPC C-SPC`                             | Set the mark, pushing it onto the mark ring, without activating it.                                          |\n| `C-u C-SPC`                               | Move point to where the mark was, and restore the mark from the ring of former marks.                        |\n| `C-x C-x`                                 | Set the mark at point, and activate it; then move point where the mark used to be (exchange-point-and-mark). |\n\nSee [this page](https://www.gnu.org/software/emacs/manual/html_node/emacs/Setting-Mark.html) and [this page](https://www.gnu.org/software/emacs/manual/html_node/emacs/Mark-Ring.html) about the mark and the mark ring.\n\n## Intellisense\n\n| Command                        | Desc                                                                                                                                         |\n| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| `C-M-i`, `M-TAB`, `M-/`, `C-'` | Trigger suggest. These keybindings call `editor.action.triggerSuggest` command, alternating Emacs' `completion-at-point` or `dabbrev-expand` |\n\n## Text registers\n\n| Command       | Desc                                              |\n| ------------- | ------------------------------------------------- |\n| `C-x r s `_r_ | Copy region into register _r_ (copy-to-register). |\n| `C-x r i `_r_ | Insert text from register _r_ (insert-register).  |\n\nSee [this page](https://www.gnu.org/software/emacs/manual/html_node/emacs/Text-Registers.html) about the text registers.\n\n## Position registers\n\n| Command         | Desc                                                                                       |\n| --------------- | ------------------------------------------------------------------------------------------ |\n| `C-x r SPC `_r_ | Record the position of point and the current buffer in register _r_ (`point-to-register`). |\n| `C-x r j `_r_   | Jump to the position and buffer saved in register _r_ (`jump-to-register`).                |\n\n## Rectangles\n\n| Command     | Desc                                                                                                      |\n| ----------- | --------------------------------------------------------------------------------------------------------- |\n| `C-x r k`   | Kill the text of the region-rectangle, saving its contents as the last killed rectangle (kill-rectangle). |\n| `C-x r M-w` | Save the text of the region-rectangle as the last killed rectangle (copy-rectangle-as-kill).              |\n| `C-x r d`   | Delete the text of the region-rectangle (delete-rectangle).                                               |\n| `C-x r y`   | Yank the last killed rectangle with its upper left corner at point (yank-rectangle).                      |\n| `C-x r p`   | Replace last kill ring to each line of rectangle if the kill ring top only contains one line.             |\n| `C-x r o`   | Insert blank space to fill the space of the region-rectangle (open-rectangle).                            |\n| `C-x r c`   | Clear the region-rectangle by replacing all of its contents with spaces (clear-rectangle).                |\n| `C-x r t`   | Replace rectangle contents with string on each line (string-rectangle).                                   |\n| `C-x SPC`   | Toggle Rectangle Mark mode (rectangle-mark-mode).                                                         |\n\n### Rectangle Registers\n\n| Command       | Desc                                                                                                                 |\n| ------------- | -------------------------------------------------------------------------------------------------------------------- |\n| `C-x r r `_r_ | Copy the region-rectangle into register _r_ (`copy-rectangle-to-register`). With prefix argument, delete it as well. |\n| `C-x r i `_r_ | Insert the rectangle stored in register _r_ (if it contains a rectangle) (`insert-register`).                        |\n\n### Other Commands\n\n| Command       | Desc                                                                                 |\n| ------------- | ------------------------------------------------------------------------------------ |\n| `C-g` (`ESC`) | Quit                                                                                 |\n| `ESC ESC ESC` | Quit (`keyboard-escape-quit`, but this extension does not distinguish it from `C-g`) |\n| `C-'` (`M-/`) | IntelliSense Suggestion                                                              |\n| `M-x`         | Open command palette                                                                 |\n| `C-M-SPC`     | Toggle SideBar visibility                                                            |\n| `C-x z`       | Toggle Zen Mode                                                                      |\n| `C-x C-c`     | Close window (save-buffers-kill-terminal)                                            |\n\n### File Commands\n\n| Command   | Desc                                                                                                                                                                                                                                                                                                                                                                                       |\n| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `C-x C-f` | QuickOpen a file (Tips: This extension assigns `C-x C-f` to the VSCode's native [quick file navigation](https://code.visualstudio.com/docs/editor/editingevolved#_quick-file-navigation). If you prefer more Emacs-like behavior, [The \"File Browser\" extension by Bodil Stokke (`bodil.file-browser`)](https://marketplace.visualstudio.com/items?itemName=bodil.file-browser) may help.) |\n| `C-x C-s` | Save                                                                                                                                                                                                                                                                                                                                                                                       |\n| `C-x C-w` | Save as                                                                                                                                                                                                                                                                                                                                                                                    |\n| `C-x s`   | Save all files                                                                                                                                                                                                                                                                                                                                                                             |\n| `C-x C-n` | Open new window                                                                                                                                                                                                                                                                                                                                                                            |\n\n### Tab / Buffer Manipulation Commands\n\n| Command     | Desc                                              |\n| ----------- | ------------------------------------------------- |\n| `C-x b`     | Switch to another open buffer                     |\n| `C-x k`     | Close current tab (buffer)                        |\n| `C-x 0`     | Close the current editor group (`delete-window`). |\n| `C-x 1`     | Close editors in other (split) group.             |\n| `C-x 2`     | Split editor horizontal                           |\n| `C-x 3`     | Split editor vertical                             |\n| `C-x 4`     | Toggle split layout (vertical to horizontal)      |\n| `C-x o`     | Focus another editor group (`other-window`)       |\n| `C-x LEFT`  | Select the previous tab (previous-buffer).        |\n| `C-x RIGHT` | Select the next tab (next-buffer).                |\n\n### Prefix argument\n\nSee https://www.gnu.org/software/emacs/manual/html_node/emacs/Arguments.html for detail\n\n| Command      | Desc               |\n| ------------ | ------------------ |\n| `C-u`        | universal-argument |\n| `M-\u003cnumber\u003e` | digit-argument     |\n| `M--`        | negative-argument  |\n\n### sexp\n\n| Command                              | Prefix argument | Desc                                                                                       |\n| ------------------------------------ | --------------- | ------------------------------------------------------------------------------------------ |\n| `C-M-f`                              | ✓               | Move forward over a balanced expression (forward-sexp)                                     |\n| `C-M-b`                              | ✓               | Move backward over a balanced expression (backward-sexp)                                   |\n| `C-M-S-2` (`C-M-@` with US keyboard) | ✓               | Set mark after end of following balanced expression (mark-sexp). This does not move point. |\n| `C-M-k`                              | ✓               | Kill balanced expression forward (kill-sexp)                                               |\n| `C-M-Bksp`                           | ✓               | Kill balanced expression backward (backward-kill-sexp)                                     |\n| `C-S-k`                              | ✓               | Kill a line as if with `kill-line`, but respecting delimiters. (paredit-kill)              |\n\nThis extension makes use of [paredit.js](https://github.com/rksm/paredit.js) to provide sexp functionalities. Thank you for this great library.\n\n### Looking up identifiers\n\n| Command                          | Desc                                                                                                                                                       |\n| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `M-.`                            | Find definitions of an identifier (xref-find-definitions). It's just bound to VSCode's \"Go to Definition\" (`editor.action.revealDefinition`).              |\n| `M-,`                            | Go back to where you previously invoked M-. and friends (xref-go-back). It's just bound to VSCode's \"Go Back\" (`workbench.action.navigateBack`).           |\n| `C-M-,`                          | Go forward to where you previously invoked M-, (xref-go-forward). It's just bound to VSCode's \"Go Forward\" (`workbench.action.navigateForward`).           |\n| `M-S-/` (`M-?` with US keyboard) | Find references of an identifier (xref-find-references). It's just bound to VSCode's \"References: Find All References\" (`references-view.findReferences`). |\n\n## Other commands/APIs\n\n### `emacs-mcx.executeCommandWithPrefixArgument`\n\nThis command calls another command with the prefix argument.\nThis is mainly for extension developers who want to make the extensions collaborative with this extension's prefix argument. See [the issue #1146](https://github.com/whitphx/vscode-emacs-mcx/issues/1146) for the discussion about it.\n\nFor example, if you define the keybinding below,\n\n- `C-x e` will call the command `foo` with the argument `{}`.\n- `C-u C-x e` will call the command `foo` with the argument `{ prefixArgument: 4 }`.\n\n```json\n{\n  \"key\": \"ctrl+x e\",\n  \"command\": \"emacs-mcx.executeCommandWithPrefixArgument\",\n  \"args\": {\n    \"command\": \"foo\"\n  }\n}\n```\n\nYou can pass the arguments to the target command as below. In this case,\n\n- `C-x e` will call the command `foo` with the argument `{ baz: 42 }`.\n- `C-u C-x e` will call the command `foo` with the argument `{ prefixArgument: 4, baz: 42 }`.\n\n```json\n{\n  \"key\": \"ctrl+x e\",\n  \"command\": \"emacs-mcx.executeCommandWithPrefixArgument\",\n  \"args\": {\n    \"command\": \"foo\",\n    \"args\": {\n      \"baz\": 42\n    }\n  }\n}\n```\n\nYou can change the key name of the prefix argument.\n\n```json\n{\n  \"key\": \"ctrl+x e\",\n  \"command\": \"emacs-mcx.executeCommandWithPrefixArgument\",\n  \"args\": {\n    \"command\": \"foo\",\n    \"prefixArgumentKey\": \"repeat\"\n  }\n}\n```\n\n- `C-x e` will call the command `foo` with the argument `{}`.\n- `C-u C-x e` will call the command `foo` with the argument `{ repeat: 4 }`.\n\n### Overriding the prefix argument\n\nWhen you define a keybinding for `emacs-mcx.*` commands, you can override the prefix argument by specifying the `prefixArgument` in the keybinding's arguments.\n\nFor example:\n\n```json\n{\n  \"key\": \"alt+shift+y\",\n  \"command\": \"emacs-mcx.yankPop\",\n  \"args\": {\n    \"prefixArgument\": -1\n  }\n}\n```\n\nWith this keybinding, you can call `emacs-mcx.yankPop` command with a prefix argument `-1` by pressing `alt+shift+y`.\n\n## Conflicts with default key bindings\n\n- `ctrl+d`: editor.action.addSelectionToNextFindMatch =\u003e **Use `ctrl+alt+n` instead**;\n- `ctrl+g`: workbench.action.gotoLine =\u003e **Use `alt+g g` instead**;\n- `ctrl+b`: workbench.action.toggleSidebarVisibility =\u003e **Use `ctrl+alt+space` instead**;\n- `ctrl+j`: workbench.action.togglePanel =\u003e **Use `ctrl+x j` instead**;\n- `ctrl+space`: toggleSuggestionDetails, editor.action.triggerSuggest =\u003e **Use `ctrl+'` instead**;\n- `ctrl+x`: editor.action.clipboardCutAction =\u003e **Use `ctrl+w` instead**;\n- `ctrl+v`: editor.action.clipboardPasteAction =\u003e **Use `ctrl+y` instead**;\n- `ctrl+k`: editor.debug.action.showDebugHover, editor.action.trimTrailingWhitespace, editor.action.showHover, editor.action.removeCommentLine, editor.action.addCommentLine, editor.action.openDeclarationToTheSide;\n- `ctrl+k z`: workbench.action.toggleZenMode =\u003e **Use `ctrl+x z` instead**;\n- `ctrl+y`: redo;\n- `ctrl+m`: editor.action.toggleTabFocusMode;\n- `ctrl+/`: editor.action.commentLine =\u003e **Use `ctrl+;` instead**;\n- `ctrl+p` \u0026 `ctrl+e`: workbench.action.quickOpen =\u003e **Use `ctrl+x ctrl+f` instead**;\n- `ctrl+o`: workbench.action.files.openFileFolder;\n\n## Contributions/Development\n\nYour contributions are very welcome!\n\nPlease see [CONTRIBUTING.md](./CONTRIBUTING.md) about development of this extension.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhitphx%2Fvscode-emacs-mcx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhitphx%2Fvscode-emacs-mcx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhitphx%2Fvscode-emacs-mcx/lists"}