Skip to content

kshartman/vscode-emacs-unified

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,440 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Emacs Unified

VS Code Marketplace GitHub Release

A consolidation fork of Awesome Emacs Keymap (vscode-emacs-mcx) that adds new commands and absorbs related extensions into a single package.

Emacs Unified is a fork of vscode-emacs-mcx by Yuichiro Tsuchiya. It inherits all of the upstream functionality and adds new features, bug fixes, and absorbed extensions that were previously separate installs.

Why fork?

Running vanilla Emacs keybindings in VS Code previously required installing multiple extensions that overlapped, conflicted, or accumulated supply-chain risk. Emacs Unified consolidates them:

Previously separate extension Status in Emacs Unified
Awesome Emacs Keymap (vscode-emacs-mcx) Base — all 63+ commands and 1200+ keybindings inherited
vscode-dired Absorbed — rewritten with async I/O, zero runtime deps
vscode-emacs-tab Dropped — upstream's TabToTabStop is superior
vscode-emacs-indent Dropped — redundant
vscode-emacs-delete-horizontal-space Dropped — upstream already has deleteHorizontalSpace
vscode-json-pretty-printer Dropped — VS Code has built-in JSON formatting

What's new (beyond upstream)

These features are not in Awesome Emacs Keymap and are original to Emacs Unified:

M-; comment-dwim

A faithful implementation of Emacs' comment-dwim with five behaviors depending on context:

  • Region active — toggle comment/uncomment
  • Blank line — insert comment at code indentation level (not column 0)
  • Code line, no comment — append comment at comment-column
  • Code line with existing comment — move cursor into the comment
  • Comment-only line — realign to code indentation

Block comment support: C mode uses /* */ (matching cc-mode), C++ and most others use //. Built-in syntax for 40+ languages, user-extensible via emacs-mcx.commentSyntax.

M-g n / M-g p unified next-error

Emacs-like next-error / previous-error that checks for diagnostics first, then falls back to search sidebar results — just like Emacs navigates whatever error source is active.

Dired file browser

Browse and manage files without leaving VS Code. Open with C-x d. See the keybinding reference below for all dired commands.

Additional keybindings

Binding Command
C-M-u backward-up-list — move up/out one paren level
C-M-d down-list — move forward and down into next list
C-x d Open dired (standard Emacs binding)
C-x C-b List buffers by most recently used
C-M-\ Format selection / document (indent-region)

Other improvements

  • Zero runtime npm dependencies (except paredit-ts) — replaced Winston logger with VS Code's built-in LogOutputChannel
  • Sexp operations powered by paredit-ts — a TypeScript rewrite of paredit.js
  • Zero npm audit vulnerabilities
  • Works as both desktop and web extension

Compatibility with Awesome Emacs Keymap

Emacs Unified retains the emacs-mcx configuration namespace so your existing emacs-mcx.* settings carry over without changes. However, Emacs Unified and Awesome Emacs Keymap cannot be installed at the same time — they share command IDs and keybindings. Uninstall one before installing the other.

New settings (Emacs Unified only)

emacs-mcx.commentColumn

Column at which comment-dwim (M-;) inserts end-of-line comments. Default is 32, matching Emacs' default comment-column.

emacs-mcx.commentSyntax

Map of VS Code language ID to comment delimiter. Overrides or extends the built-in defaults (40+ languages). A plain string means a line comment; an object with start/end means a block comment.

"emacs-mcx.commentSyntax": {
  "python": "#",
  "c": { "start": "/*", "end": "*/" }
}

Complete keybinding reference

All keybindings from the upstream Awesome Emacs Keymap are included plus the additions listed above. The Meta key is Alt by default; configure via emacs-mcx.useMetaPrefixEscape, emacs-mcx.useMetaPrefixCtrlLeftBracket, or emacs-mcx.useMetaPrefixMacCmd.

Movement
Key Command Prefix arg
C-f / C-b forward-char / backward-char
C-n / C-p next-line / previous-line
C-a / C-e beginning-of-line / end-of-line
M-f / M-b forward-word / backward-word
C-<right> / C-<left> right-word / left-word
M-m back-to-indentation
C-v / M-v scroll-up / scroll-down
M-{ / M-} backward-paragraph / forward-paragraph
M-< / M-> beginning-of-buffer / end-of-buffer
M-g g goto-line
M-g n / M-g p next-error / previous-error (diagnostics, then search results)
C-l recenter-top-bottom
Search
Key Command
C-s / C-r isearch-forward / isearch-backward
C-M-s / C-M-r isearch-forward-regexp / isearch-backward-regexp
M-% query-replace
C-M-% query-replace-regexp
C-M-n / C-M-p add selection to next/previous find match
M-s o Quick Search (like occur)
Editing
Key Command Prefix arg
C-d / C-h delete forward / backward
M-\ delete-horizontal-space
C-x C-o delete-blank-lines
C-t / C-x C-t transpose-chars / transpose-lines
M-^ delete-indentation
M-d / M-Bksp kill-word / backward-kill-word
M-z zap-to-char
C-k kill-line
C-S-Bksp kill-whole-line
C-w kill-region
M-w kill-ring-save
C-y yank
M-y yank-pop
C-c y browse kill ring
C-o / C-j / C-m open-line / newline
C-x h select all
C-/ / C-_ undo
C-; toggle line comment
M-; comment-dwim
C-M-\ indent-region / format document
M-l / M-u / M-c lowercase / uppercase / titlecase word
Mark and region
Key Command
C-SPC set-mark-command
C-SPC C-SPC set mark, push to ring, deactivate
C-u C-SPC pop mark ring
C-x C-x exchange-point-and-mark
Sexp / ParEdit
Key Command Prefix arg
C-M-f / C-M-b forward-sexp / backward-sexp
C-M-u / C-M-d backward-up-list / down-list
C-M-@ mark-sexp
C-M-k / C-M-Bksp kill-sexp / backward-kill-sexp
C-S-k paredit-kill

Powered by paredit-ts.

Registers and rectangles
Key Command
C-x r s r copy-to-register
C-x r i r insert-register
C-x r SPC r point-to-register
C-x r j r jump-to-register
C-x r k kill-rectangle
C-x r M-w copy-rectangle-as-kill
C-x r d delete-rectangle
C-x r y yank-rectangle
C-x r o open-rectangle
C-x r c clear-rectangle
C-x r t string-rectangle
C-x r r r copy-rectangle-to-register
C-x SPC rectangle-mark-mode
Files, buffers, and windows
Key Command
C-x C-f find-file (Quick Open)
C-x C-s save-buffer
C-x C-w write-file (Save As)
C-x s save-some-buffers
C-x C-n new window
C-x b switch-to-buffer
C-x C-b list-buffers (MRU)
C-x k kill-buffer
C-x 0 delete-window
C-x 1 delete-other-windows
C-x 2 / C-x 3 split below / right
C-x 4 toggle split layout
C-x o other-window
C-x LEFT / C-x RIGHT previous-buffer / next-buffer
Dired (file browser)

Open with C-x d.

Key Command
RET Open file or enter directory
^ Go up to parent directory
. Toggle dot files
g Refresh
m / u Mark / unmark
+ Create directory
C-x f Create file
R / C / D Rename / copy / delete
q Close dired
Other
Key Command
C-g / ESC quit
M-x command palette
C-M-SPC toggle sidebar
C-x z toggle Zen Mode
C-x C-c close window
C-u universal-argument
M-<digit> digit-argument
M-- negative-argument
M-. find definitions
M-, go back
C-M-, go forward
M-? find references
C-M-i / M-/ trigger suggest

Settings reference

Most emacs-mcx.* settings from Awesome Emacs Keymap are supported. See the upstream documentation for inherited configuration options, when clause contexts, and the prefix argument API.

Dired settings

Setting Type Default Description
emacs-mcx.dired.fixedWindow boolean false Reuse the same editor tab for dired navigation
emacs-mcx.dired.askDirectory boolean true Prompt for directory when opening dired

Attribution

This extension is built on the work of several authors:

See LICENSE for full details.

Install

  • VS Code Marketplace: Search "Emacs Unified" in Extensions, or code --install-extension kshartman.emacs-unified
  • GitHub Release (VSIX): Download from latest release and code --install-extension emacs-unified.vsix

Contributing

See CONTRIBUTING.md for development setup, build commands, and release workflow.

About

Comprehensive Emacs emulation for VS Code — consolidates keybindings, kill-ring, mark-mode, dired, and more into a single extension

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages