evil-lisp-state

Homepage: https://github.com/syl20bnr/evil-lisp-state

Author: Sylvain Benner

Updated:

Summary

An evil state to edit Lisp code

Commentary

Adds a new Evil state called --LISP-- () with mnemonics key bindings
to navigate Lisp code and edit the sexp tree.

Principle:
----------

To execute a command while in normal state, a leader is used.
The leader has to be defined with the function `evil-lisp-state-leader'.
By default, any command when executed sets the current state to
`lisp state`.

For example, to slurp three times while in normal state:
     3 s
Or to wrap a symbol in parenthesis then slurping two times:
     w 2 s

Key Binding  | Function
-------------|------------------------------------------------------------
`leader .'   | switch to `lisp state'
`leader %'   | evil jump item
`leader :'   | ex command
`leader ('   | insert expression before (same level as current one)
`leader )'   | insert expression after (same level as current one)
`leader $'   | go to the end of current sexp
`leader ` k' | hybrid version of kill sexp (can be used in non lisp dialects)
`leader ` p' | hybrid version of push sexp (can be used in non lisp dialects)
`leader ` s' | hybrid version of slurp sexp (can be used in non lisp dialects)
`leader ` t' | hybrid version of transpose sexp (can be used in non lisp dialects)
`leader 0'   | go to the beginning of current sexp
`leader a'   | absorb expression
`leader b'   | forward barf expression
`leader B'   | backward barf expression
`leader c'   | convolute expression
`leader ds'  | delete symbol
`leader dw'  | delete word
`leader dx'  | delete expression
`leader e'   | (splice) unwrap current expression and kill all symbols after point
`leader E'   | (splice) unwrap current expression and kill all symbols before point
`leader h'   | previous symbol
`leader H'   | go to previous sexp
`leader i'   | switch to `insert state`
`leader I'   | go to beginning of current expression and switch to `insert state`
`leader j'   | next closing parenthesis/bracket/brace
`leader J'   | join expression
`leader k'   | previous opening parenthesis/bracket/brace
`leader l'   | next symbol
`leader L'   | go to next sexp
`leader p'   | paste after
`leader P'   | paste before
`leader r'   | raise expression (replace parent expression by current one)
`leader s'   | forwared slurp expression
`leader S'   | backward slurp expression
`leader t'   | transpose expression
`leader u'   | undo
`leader U'   | got to parent sexp backward
`leader C-r' | redo
`leader v'   | switch to `visual state`
`leader V'   | switch to `visual line state`
`leader C-v' | switch to `visual block state`
`leader w'   | wrap expression with parenthesis
`leader W'   | unwrap expression
`leader y'   | copy expression

Configuration:
--------------

No default binding comes with the package, you have to explicitly
bind the lisp state to a key with the function `evil-lisp-state-leader'
For instance: `(evil-lisp-state-leader ", l")'

Key bindings are set only for `emacs-lisp-mode' by default.
It is possible to add major modes with the variable
`evil-lisp-state-major-modes'.

It is also possible to define the key bindings globally by
setting `evil-lisp-state-global' to t. In this case
`evil-lisp-state-major-modes' has no effect.

If you don't want commands to enter in `lisp state' by default
set the variable `evil-lisp-state-enter-lisp-state-on-command'
to nil. Then use the `.' to enter manually in `lisp state'

Dependencies