Скажем, у меня есть код elisp вроде:
(+ 2 3▮(+ 3
4))
Есть ли способ автоматически сделать отступ в сексе после курсора, когда я добавляю или удаляю символы?
Поэтому после нажатия SPC 4 SPC
я бы автоматически получил:
(+ 2 3 4 ▮(+ 3
4))
Я могу сделать это руководство, позвонив, mark-sexp
а затем indent-region
. Есть ли лучшие способы сделать это?
elisp
indentation
Мацей Гошицкий
источник
источник
electric-indent-mode
это намного лучше , чем отображение<return>
кnewline-and-indent
Ответы:
Вместо
mark-sexp
+indent-region
вы можете нажатьC-M-q
. Это позвонитindent-pp-sexp
. Не автоматически, но немного лучше, чем вызывать две команды.Или, если вы используете
paredit-mode
, нажмитеM-q
. Это переопределяет все определение функции, в котором вы находитесь.источник
(add-hook 'post-self-insert-hook 'indent-pp-sexp)
работает удивительно хорошо.M-x sp-indent-defun
. Я связываю это сC-M-q
.Агрессивный режим отступа
Поскольку некоторые люди просили об этом, я превратил этот ответ в пакет .
Если у вас настроен Melpa, вы можете установить его с
См. Readme для всех опций, но самый простой способ включить его:
Старый ответ
Следующее делает авто-отступ только для буферов elisp. Он также имеет преимущество работы, когда вы стираете или дергаете вещи (вместо того, чтобы просто печатать). Это легко добавить и в другие режимы.
Эта функция будет делать отступ для любого s-выражения, внутри которого находится точка. Вы можете привязать его к клавише, если хотите, но сначала смотрите ниже.
Этот хук сделает так, что эта функция будет запускаться после того, как вы что-нибудь напечатаете, но только в буферах elisp. Это должно держать все всегда с отступом.
Попытайся! Это работает замечательно хорошо.
Кроме того, следуя предложению @ holocronweaver в комментариях, вы можете использовать что-то вроде следующего для c-подобных языков:
источник
Я не знаю о ранее существовавшем решении, но вы можете использовать это,
post-self-insert-hook
чтобы выполнить это самостоятельно:Я бы беспокоился о потенциальных проблемах с производительностью.
источник
Вы можете попробовать режим el-fly-indent-mode , который более хорош, чем
aggressive-indent-mode
при работе с Elisp.источник