Веселые отступы в режиме SML

Я установил режим SML в Emacs, и отступы перепутались. Я отключил все свои настройки .emacs, но это не имело никакого значения. В конце каждой строки в приведенном ниже коде я использовал C-j, который сопоставляется с newline-and-indent.

pow

dist

Если я выделю все и повторю отступ (C-M-\), результат будет более понятным:

pow-improveddist-улучшенный

Я использую Emacs 24.1.1 и SML Mode 6.2 в Ubuntu 12.10. Что я должен делать?


person Patrick Brinich-Langlois    schedule 17.01.2013    source источник


Ответы (3)


Не используйте newline-and-indent. Вместо этого вы можете использовать reindent-then-new-and-indent или electric-indent-mode.

person Stefan    schedule 17.01.2013
comment
Интересный. Когда я использую эти команды, дурацкий отступ все еще появляется в строке, которую я сейчас редактирую, но после того, как я нажимаю Enter, строка перемещается влево туда, где она должна быть. Это так должно работать? В любом случае, это большое улучшение по сравнению с тем, что было раньше. - person Patrick Brinich-Langlois; 18.01.2013
comment
Да, именно так это и должно работать: Emacs обычно не делает повторных отступов в фоновом режиме. Он повторяется только тогда, когда вы об этом просите. Обычно это делается с помощью TAB, но может быть совмещено с другими клавишами, такими как RET, поэтому, пока вы не нажмете одну из этих клавиш, строка просто сохранит отступ, который у нее был. В вашем случае строка начинается с неправильного отступа, потому что режим SML не может знать, что вы собираетесь напечатать, и он просто предполагает, что вы будете вводить какой-то дополнительный аргумент (не обращая внимания на тот факт, что 0 и 1 не могут быть функциями). - person Stefan; 18.01.2013

попробуйте в файле .emacs:

(setq default-tab-width 4); 
(setq-default indent-tabs-mode nil);
(global-set-key (kbd "TAB") 'self-insert-command); 

Я не волшебник, но это сработало для меня. http://www.pement.org/emacs_tabs.htm

person earth2jason    schedule 18.01.2013

Следуя предложению Стефана (сейчас ему 4 года...), вы можете автоматически включить второстепенный режим electric-indent-mode для sml-mode, вставив следующее:

  (push (lambda () electric-indent-local-mode 1) sml-mode-hook)

где-то в вашем коде инициализации emacs.

Или, вы можете предпочесть:

(use-package sml-mode
   :config
   (push (lambda () electric-indent-local-mode 1) sml-mode-hook))

Мне кажется, что это дает достаточно разумное поведение для кода с отступом в sml-mode.

person George McNinch    schedule 07.01.2018