/evil-exchange

Port of vim-exchange

Primary LanguageEmacs Lisp

MELPA Build Status

English is not my first language, so feel free to correct me of any mistake.

evil-exchange

Easy text exchange operator for Evil. This is the port of vim-exchange by Tom McDonald.

Default bindings

gx (evil-exchange)

On the first use, define (and highlight) the first {motion} to exchange. On the second use, define the second {motion} and perform the exchange.

gX (evil-exchange-cancel)

Clear any {motion} pending for exchange.

Notes

  • gx (and gX) can also be used from visual mode, which is sometimes easier than coming up with the right {motion}
  • If you're using the same motion again (e.g. exchanging two words using gxiw), you can use . (evil-repeat) the second time.
  • gxx works as you expect.

Highlights

  • Unlike the original vim plugin's buffer local behaviour, this extension allows you to exchange texts across buffers.
  • Works correctly even when text insertion/deletion occurs between two evil-exchange invokes.

Installation

(require 'evil-exchange)
;; change default key bindings (if you want) HERE
;; (setq evil-exchange-key (kbd "zx"))
(evil-exchange-install)

evil-exchange is also available in melpa and is shipped with spacemacs.

Customization

You can change the default bindings by customizing evil-exchange-key and/or evil-exchange-cancel-key BEFORE evil-exchange-install is called.

Vim-compatible key bindings

Due to the way how evil (and emacs) implements key bindings, evil-exchange can't be bound to cx (which is the default bindings of the original vim plugin) by customizing evil-exchange-key option. If you prefer the key bindings suggested by vim-exchange, you can try the settings below:

(require 'evil-exchange)
(evil-exchange-cx-install)

The evil-exchange-cx-install function tries to mimic the original vim plugin's behaviour, i.e. cx in normal state bound to evil-exchange, cxc in normal state bound to evil-exchange-cancel, and X in visual state bound to evil-exchange.

Known Issues

  • Some packages may redefine c (evil-change) in normal state or/and x in operator state, which will conflict with the vim style bindings (cx and cxc). In this case, you may have to unbind them to make evil-exchange-cx-install work. Any PRs are welcome for compatibility.