Please note! mark-multiple has been superseded by multiple-cursors
It has all the functionality of mark-multiple, but with a more robust implementation and more features.
To get the features from mark-multiple, use:
mc/mark-more-like-this
in place ofmark-more-like-this
set-rectangular-region-anchor
as a more convenient replacement forinline-string-rectangle
- or
mc/edit-lines
for a more familiar replacement forinline-string-rectangle
mc/mark-sgml-tag-pair
in place ofrename-sgml-tag
Read more about multiple-cursors on its own page.
mark-multiple.el
An emacs extension that sorta lets you mark several regions at once.
More precisely, it allows for one master region, with several mirror regions. The mirrors are updated inline while you type. This allows for some awesome functionality. Or at least, some more visually pleasing insert and replace operations.
Video
You can watch an intro to mark-multiple at Emacs Rocks.
Done
- A general library for managing master and mirrors
mark-more-like-this
which selects next/previous substring in the buffer that matches the current region.inline-string-rectangle
which works likestring-rectangle
but lets you write inline - making it less error prone.rename-sgml-tag
which updates the matching tag while typing.
Note: js2-rename-var
has been moved to js2-refactor.el.
Installation
git submodule add https://github.com/magnars/mark-multiple.el.git site-lisp/mark-multiple
Then add the modules you want to your init-file:
(require 'inline-string-rectangle)
(global-set-key (kbd "C-x r t") 'inline-string-rectangle)
(require 'mark-more-like-this)
(global-set-key (kbd "C-<") 'mark-previous-like-this)
(global-set-key (kbd "C->") 'mark-next-like-this)
(global-set-key (kbd "C-M-m") 'mark-more-like-this) ; like the other two, but takes an argument (negative is previous)
(global-set-key (kbd "C-*") 'mark-all-like-this)
(add-hook 'sgml-mode-hook
(lambda ()
(require 'rename-sgml-tag)
(define-key sgml-mode-map (kbd "C-c C-r") 'rename-sgml-tag)))
Feel free to come up with your own keybindings.
Bugs and gotchas
-
Adding a master and mirrors does not remove the active region. This might feel strange, but turns out to be practical.
-
The current mark-multiple general library lets you do stupid shit, like adding overlapping mirrors. That's only a problem for people who want to write their own functions using
mm/create-master
andmm/add-mirror
. -
Seems like there is some conflict with undo-tree.el, which sometimes clobbers the undo history. I might be doing something particularly stupid. Looking into it.
-
Reverting a buffer with active marks makes them unremovable.
A wild idea
Is this a subset of a crazy multiple-point module? Would that even work?
Edit: Yes, indeed it is. And yes, it does. This module has been pretty much eclipsed by multiple-cursors.el, which goes quite a bit farther and with a saner implementation to boot.
Contribute
If you make some nice commands with mark-multiple, it would be great if you opened a pull-request. The repo is at:
https://github.com/magnars/mark-multiple.el
Contributors
- Pao-Chin Wu fixed
mark-next-like-this
if no region is active. - Syohei YOSHIDA improved the error messages for
mark-next-like-this
- Mounier Florian added
mark-all-like-this
andmark-all-like-this-in-region
Thanks!
License
Copyright (C) 2011 Magnar Sveen
Author: Magnar Sveen [email protected] Keywords: marking library
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.