Eu uso a seguinte função, que obtive aqui , para esse propósito:
(defun bounce-paren ()
"Will bounce between matching parens just like % in vi"
(interactive)
(let ((prev-char (char-to-string (preceding-char)))
(next-char (char-to-string (following-char))))
(cond ((string-match "[[{(<]" next-char) (forward-sexp 1))
((string-match "[\]})>]" prev-char) (backward-sexp 1))
(t (error "%s" "Not on a paren, brace, or bracket")))))
É importante observar que ele suporta apenas pares de caractere único e que modificá-lo para suportar delimitadores de vários caracteres exigiria essencialmente uma reescrita inteira. Eu tenho que vinculado a F2 (e raramente usá-lo), mas você poderia ligá-lo a%.
Recomendo a atenção do modo Smartparens , que aceita pares arbitrários de delimitadores de um ou vários caracteres, incluindo casos em que ambos os delimitadores são a mesma cadeia. Uma vez que você tenha seus pares configurados, uma função Lisp razoavelmente trivial, que dependendo do contexto chama uma das funções de navegação sp-beginning-of-sexp
ou sp-end-of-sexp
, deve lhe dar o comportamento que você deseja.
Considere também highlight-parentheses-mode , que colore as chaves em torno do ponto; Eu acho que usar esse modo me dá 99,4% do que eu costumava ter pulando entre chaves, sem precisar mover o ponto.