When cursor on one parentheses, how to jump to the pairing parentheses. Good to work in emacs -nw .
Just like % in Vim.
;;After got hint from @Lindy, @Francesco, I found more:
C-M-f Move forward over a balanced expression
C-M-b Move backward over a balanced expression
C-M-k Kill balanced expression forward
C-M-SPC put the mark at the end of the sexp.
C-M-n Move forward over a parenthetical group
C-M-p Move backward over a parenthetical group
;; C-M key binding can also be done by --> ESC Control-key
;;And put this to .emacs, it will highlight opening/closing parens:
(show-paren-mode 1)
paredit
mode that keeps parentheses balanced, and allows to manipulate...
C-M-u
to go up to the surrounding paren before C-M-f
, so you don't have to be on it already.
Use C-M-right
and C-M-left
(respectively backward-sexp
and forward-sexp
) to go to the beginning or the end of the current expression. This works for parenthesis pairs but also for plain words.
As mentioned in emacs wiki (http://www.emacswiki.org/emacs/NavigatingParentheses):
C-M-n forward-list Move forward over a parenthetical group
C-M-p backward-list Move backward over a parenthetical group
C-M-f forward-sexp Move forward over a balanced expression
C-M-b backward-sexp Move backward over a balanced expression
C-M-k kill-sexp Kill balanced expression forward
C-M-SPC mark-sexp Put the mark at the end of the sexp.
https://superuser.com/questions/677516/how-do-i-jump-to-the-opening-or-closing-paren-brace-in-emacs
For parentheses, braces and brackets just double clicking on them does the trick.
backward-sexp
equivalent).
I suggest C-M-f and C-M-b, as C-M-right/left are already bound to my DE (switch to desktop on the right / left).
I use the following small function for exactly that (though I don't know whether or not it matches vim's behavior; I'm no vim user myself):
(defun mo-match-paren (arg)
"Go to the matching parenthesis."
(interactive "p")
(cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
((looking-at "\\s\)") (forward-char 1) (backward-list 1))
(t (self-insert-command (or arg 1)))))
I would highly recommend SmartParens it has extensive navigation and manipulation of parenthetical structures (ie. wrapping, quotes, tags, brackets, braces, regular parentheses, sexp, etc.) With support for many languages, and structures, with easy customization.
It also supports fairly complex structures, which are referred to as hybrid-s-expressions in it's documentation. Which makes it extremely powerful for manipulating code in languages such as C/C++, Java, JS etc.
For navigation the following are used.
sp-forward-sexp (&optional arg) ;; C-M-f
sp-backward-sexp (&optional arg) ;; C-M-b
sp-down-sexp (&optional arg) ;; C-M-d
sp-backward-down-sexp (&optional arg) ;; C-M-a
sp-up-sexp (&optional arg) ;; C-M-e
sp-backward-up-sexp (&optional arg) ;; C-M-u
sp-next-sexp (&optional arg) ;; C-M-n
sp-previous-sexp (&optional arg) ;; C-M-p
sp-beginning-of-sexp (&optional arg) ;; C-S-d
sp-end-of-sexp (&optional arg) ;; C-S-a
sp-beginning-of-next-sexp (&optional arg) ;; none
sp-beginning-of-previous-sexp (&optional arg) ;; none
sp-end-of-next-sexp (&optional arg) ;; none
sp-end-of-previous-sexp (&optional arg) ;; none
Note that it maps many to commands to the Emacs default equivalent. When it's installed, just browse it's functions (they're all prefixed with sp-
) to get a good feeling for it's scale.
There's a lot more to it, I'd recommend you have a look at the wiki
Success story sharing
backward-sexp
/forward-sexp
. Instead of holding simultaneously Ctrl+Alt+<arrow>, you can produce these key bindings usingEsc
thenC-<arrow>
. This way, the key combination won't be captured by gnome and will correctly be forwarded to emacs.C-M-f
andC-M-b
for forward and backward. (This corresponds to theC-f
andC-b
key mappings for plain forward and backward movement that predates keyboards with arrow keys.)