как проверить, что paredit является нарушителем
Вы можете набрать C-h k )
, находясь в буфере Lisp, чтобы увидеть, с чем )
связан.Если он связан с paredit-close-round
, тогда да paredit является нарушителем.
как отключить paredit, если вы не знаете, что его вызывает
Попробуйте ответ Аурамо в другой теме
или, если это не сработает, попробуйте следующее:
(eval-after-load 'paredit
'(defalias 'paredit-mode 'ignore))
Если вам интересно, что вызывает режим паредита в вашем Emacs, используйте M-x debug-on-entry RET paredit-mode RET
научиться жить с паредитом
Но все же я должен призвать вас продолжать использовать паредит.Давайте продолжим использовать paredit и посмотрим решения проблем, которые вы поставили.Вы спросили: «Ты знаешь, как я могу это исправить?»Я просто предполагаю, что вы спрашиваете, как это исправить, если форма.Мариус Кьельдаль дал вам решение, которое использует paredit-forward-barf-sexp
, теперь, в общем, если у вас есть какой-то код на Лиспе, где вы видите, что некоторые парены находятся в неправильных местах, и вы хотите это исправить, вы можете просто временно отключить режим paredit в этом буфере (набрав M-x paredit-mode
), затем исправьте свой код и снова включите режим paredit (снова набрав M-x paredit-mode
).Еще одна вещь, которую следует учитывать, это то, что Emacs отменил, поэтому, если вы достигнете (if (> x 5 true false))
с помощью какого-либо действия, вы можете отменить это действие и начать все сначала.Отмена связана с C-z
, если вы используете режим CUA.
Тем не менее, вы можете найти странные привязки C-left, C-right, поэтому вы можете использовать следующую настройку:
(eval-after-load 'paredit
'(progn
;; paredit-forward-barf-sexp is usually bound to <C-left>, C-}.
;; here we unbind it from <C-left>
;; so that one can continue to use <C-left> for movement.
(define-key paredit-mode-map (kbd "<C-left>") nil)
;; paredit-forward-slurp-sexp is usually bound to <C-right>, C-).
;; here we unbind it from <C-right>
;; so that one can continue to use <C-right> for movement.
(define-key paredit-mode-map (kbd "<C-right>") nil)
;; paredit-backward-kill-word is bound to M-DEL but not to <C-backspace>.
;; here we bind it to <C-backspace> as well
;; because most people prefer <C-backspace> to M-DEL.
(define-key paredit-mode-map (kbd "<C-backspace>") 'paredit-backward-kill-word)))
Вы спросили "Для чего это полезно?"по которому вы можете задавать две вещи:
- Почему
paredit-close-round
полезно?
- Почему paredit должен связывать
paredit-close-round
с )
, когда он мог связать его с лучшими ключами?
Лучший способ думать о paredit-close-round
- этодумать об этом как о коллеге C-M-u
.Переместите точку к |
в следующем коде и попробуйте нажать C-M-u
несколько раз, чтобы посмотреть, что произойдет, а затем снова переместите точку к |
и попробуйте нажать C-M-- C-M-u
(то есть введите -u
, когда включены Control и Alt) несколько раз, чтобы увидеть, что происходит.
(when t
(when t
(blah)
(blah))
(when t
(blah | blah)
(blah))
(when t
(blah)
(blah)))
C-M-u
полезно для выбора выражений;чтобы выбрать вложенную форму или формы, вы нажимаете C-M-u
несколько раз, а затем C-M-SPC
несколько раз.C-M-- C-M-u
полезно для оценки вложенной формы;Вы нажимаете C-M-- C-M-u
несколько раз, а затем C-x C-e
, чтобы проверить вмещающую форму.
paredit-close-round
в основном делает то, что делает C-M-- C-M-u
.
Почему это нормально, что paredit связывает)
команде, которая делает что-то кроме простой вставки близких парен?Потому что вы не должны вставлять закрывающую скобку самостоятельно.Всякий раз, когда вы вставляете открытое объединение, закрытое объединение также вставляется автоматически.Всякий раз, когда вы хотите изменить (blah) (blah)
на ((blah) (blah))
, вы просто выбираете две формы бла и нажимаете (
.