Для этой цели я использую следующую функцию, которую я получил здесь :
(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")))))
Следует отметить, что он поддерживает только односимвольные пары, и что его изменение для поддержки многосимвольных разделителей потребует, по существу, полного переписывания. У меня есть привязка к F2 (и я редко использую ее), но вы, конечно, можете также привязать ее к%.
Я рекомендую вашему вниманию режим Smartparens , который поддерживает произвольные пары одно- или многосимвольных разделителей, включая случаи, когда оба разделителя представляют собой одну и ту же строку. После того, как вы настроили свои пары, довольно простая функция Lisp, которая в зависимости от контекста вызывает одну из функций навигации sp-beginning-of-sexp
или sp-end-of-sexp
, должна дать вам желаемое поведение.
Также рассмотрим режим highlight-круглых скобок, который раскрашивает окружающие точки; Я нахожу, что использование этого режима дает мне 99,4% того, что я получал от подпрыгивания между фигурными скобками, без необходимости вообще перемещать точку.