multiple-cursors.el: Multiple Cursors for Emacs, and What Its Maintenance Warning Means
Multiple cursors for emacs.
At a glance
- What is it?
- multiple-cursors.el brings Sublime-style multi-point editing to Emacs. It installs from MELPA or NonGNU ELPA, but its issue tracker is closed, so adoption means accepting the author's stated support model.
- Who is it for?
- Adopt multiple-cursors.el if you edit text in Emacs and want several cursors driven from one keyboard command; it installs from MELPA, MELPA Stable or NonGNU ELPA and needs only cl-lib. Do not adopt it if you need a vendor to answer bug reports: the README states the issue tracker and pull requests are closed, and the last push was on 2026-04-19.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 167 days ago.
- What is it written in?
- Mainly Emacs Lisp, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 3, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What multiple-cursors.el solves, and who it is for
Editing the same change in ten places usually means ten round trips: search, fix, search again. multiple-cursors.el removes the round trips by letting one buffer hold several cursors at once, so a single keystroke lands in every marked position. The README frames the package plainly as "Multiple cursors for Emacs" and adds a candid note that "there are kinks", which is a fair description of a feature that reaches into Emacs internals rather than sitting on top of them.
The audience is Emacs users who already live in a buffer and want multi-point editing without leaving it. Renaming a local variable across a function, editing a column of similar lines, or inserting the same prefix into a list of entries are the natural fits. It is not aimed at people who want a modal editor's built-in multi-cursor and are happy with that editor; the package exists precisely because Emacs did not have this behaviour natively.
How the cursors are actually created and driven
The repository is split by responsibility rather than shipped as one file. multiple-cursors-core.el holds the mode itself, multiple-cursors.el is the entry point you require, and the marking commands live in mc-mark-more.el. Two smaller files handle narrow jobs: mc-edit-lines.el backs the line-based command, and rectangular-region-mode.el supports rectangular regions. mc-mark-pop.el and mc-separate-operations.el cover cursor placement and separating operations, while mc-cycle-cursors.el and mc-hide-unmatched-lines-mode.el are optional behaviours.
The mechanism is region-driven. You mark a word or region, then a mark command finds the next matching occurrence in the buffer and attaches a cursor and region there. That is why the README says to "First mark the word, then add more cursors". Commands come in directional pairs (mc/mark-next-like-this and mc/mark-previous-like-this), and in word- or symbol-restricted variants such as mc/mark-next-word-like-this and mc/mark-next-symbol-like-this, which matter when a substring match would catch text you did not mean. Once several cursors exist, mc/unmark-next-like-this and mc/skip-to-next-like-this let you drop or move individual cursors instead of restarting the selection.
Leaving the mode is part of the design. The README states that pressing <return> or C-g exits multiple-cursors-mode, and that C-g first disables multiple regions before disabling multiple cursors. Because a newline would otherwise fire in every cursor position, C-j is the documented way to insert one while the mode is active. That detail alone tells you the package intercepts ordinary editing commands rather than merely drawing extra carets.
Installing multiple-cursors from MELPA and binding your first keys
The README recommends package.el and notes the package is available on MELPA, MELPA Stable and NonGNU ELPA, the last enabled by default from Emacs 28 onwards. One command does the install:
M-x package-install multiple-cursorsAfter that you require the feature. The package depends on cl-lib, so an older Emacs or a non-package.el setup needs that installed too, from GNU ELPA:
(require 'multiple-cursors)multiple-cursors does not set keybindings for you, and the README is explicit that it "doesn't presume to know how you'd like them laid out". These are the examples it gives. The first adds a cursor to every line touched by an active multi-line region:
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)The next three cover keyword-based marking. Mark a word first, then add cursors forward, backward, or everywhere at once:
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)A first real use: open a file, put point on a word, press C-> repeatedly to add a cursor at each following occurrence, type your replacement, then press C-g to collapse back to one cursor. If you need a line break inside the edit, use C-j rather than <return>, since <return> is bound to exit the mode.
The maintenance model is the real adoption risk
The README carries a maintenance warning that is unusual in its directness. The author writes that he uses the package daily and fixes what breaks for him, but that he cannot keep pace with issues and pull requests and has closed both. The stated position is "I am still maintaining this package", qualified by the fact that he is "no longer crowdsourcing a list of issues".
Read that as a support contract, not a quality signal. A bug that affects your workflow but not the author's may sit indefinitely, and there is no public tracker where you can watch it. The repository itself is not archived and the last push was on 2026-04-19, so work does continue; the most recent tagged release listed is 1.4.0 from 2016-05-19, which tells you releases are not the unit of change here. If your team needs a documented escalation path before adding a dependency, this package does not offer one, and the README says as much rather than leaving you to discover it.
Where multiple-cursors is the wrong tool
The README's own warning that there "are kinks" is the honest starting point. Multi-cursor editing is a broad intervention: it adds state to the buffer and changes how ordinary commands behave while the mode is active, which is why <return> and C-j diverge. Modes that themselves bind keys aggressively, or packages that assume a single point, are the places where this kind of feature tends to fight the rest of your configuration. The README does not enumerate those conflicts, and with the issue tracker closed there is no maintained list to consult.
It is also the wrong tool for work that is genuinely structural. Renaming a symbol across a project, changing a function signature, or applying a transformation to every match in a file is better served by a search-and-replace or a refactoring command, because those operate on the whole set without asking you to hold multiple points in your head. multiple-cursors is strongest for small, visible, local batches, and weakest when the batch is large enough that you cannot see every cursor at once.
How it compares with Emacs' built-in rectangle commands
Emacs already ships rectangle editing, and rectangular-region-mode.el in this repository is the bridge between the two approaches. The built-in facilities work on a geometric block: you define a rectangle by its corners and operate on the columns inside it. That is precise when your target text is aligned in a column and useless when the occurrences are scattered across lines at different offsets.
multiple-cursors inverts the selection rule. Instead of defining a shape, you define a match: mark one occurrence, then let the mark commands find the others by text. The trade-off is that you are matching content rather than position, so mc/mark-next-word-like-this and mc/mark-next-symbol-like-this exist to stop a substring from pulling in occurrences you did not intend. If your edit is a true column, the built-in rectangle commands need no extra package and no mode to enter and leave. If it is a set of scattered matches, this package is the one that fits.
Licence, upgrades and the cost of keeping it in your config
The repository metadata gives the primary language as Emacs Lisp and lists the licence as unknown, and the README does not state a licence either. The top-level entries include a Cask file, which is a build and dependency descriptor, not a licence. If you need a known licence before depending on the package, check the repository for a licence file rather than assuming one; this article cannot tell you what it is.
Upgrade cost is low on the surface. Installation is through package.el against MELPA, MELPA Stable or NonGNU ELPA, so updating is the same motion as updating anything else from those archives, and the only declared dependency is cl-lib. The practical cost sits elsewhere: the README's command tables are long, and the difference between the plain, -word and -symbol variants of each mark command is the part you actually have to learn. Budget for that, not for the install. Because the issue tracker is closed, treat any local patch you write as something you own, which the README acknowledges when it suggests that Emacs is malleable enough for you to fix problems yourself.
Editorial conclusion
Adopt multiple-cursors.el if you edit text in Emacs and want several cursors driven from one keyboard command; it installs from MELPA, MELPA Stable or NonGNU ELPA and needs only cl-lib. Do not adopt it if you need a vendor to answer bug reports: the README states the issue tracker and pull requests are closed, and the last push was on 2026-04-19. Before you build it into your config, verify that the commands you bind (mc/edit-lines, mc/mark-next-like-this, mc/mark-all-like-this) behave as you expect on your Emacs version, and check the licence file in the repository, since the licence identifier is not stated in the project metadata.
Frequently asked questions
How do I put multiple cursors in Emacs with multiple-cursors?
Mark a word or region first, then run a marking command such as mc/mark-next-like-this, which adds a cursor and region at the next matching part of the buffer. The README also provides mc/edit-lines, which adds a cursor to each line covered by an active multi-line region.
How can I use multiple cursors in Emacs after installing the package?
Install with M-x package-install multiple-cursors, then add (require 'multiple-cursors) and set your own keybindings, since the package does not define any. The README's examples bind mc/edit-lines, mc/mark-next-like-this, mc/mark-previous-like-this and mc/mark-all-like-this.
How do I leave multiple-cursors-mode, and how do I insert a newline while it is active?
Press <return> or C-g to get out of multiple-cursors-mode, and note that C-g first disables multiple regions before disabling multiple cursors. To insert a newline while the mode is active, use C-j, because <return> is bound to exit.
Does multiple-cursors.el still accept bug reports and pull requests?
No. The README states that the author has closed the issue tracker and the pull requests, while saying he still maintains the package for his own use cases. Problems outside those use cases may go unfixed.
What does multiple-cursors.el depend on, and where is it available?
It depends on cl-lib, which you would need to install separately if you do not use package.el or are on an older Emacs. The README lists MELPA, MELPA Stable and NonGNU ELPA as the archives that carry it, with NonGNU ELPA enabled by default from Emacs 28 onwards.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/magnars-multiple-cursors-el)