Странно вдлъбнатина в SML режим

Инсталирах режим SML в Emacs и отстъпът е объркан. Деактивирах всичките си персонализации на .emacs, но това нямаше значение. В края на всеки ред в кода по-долу използвах C-j, което е съпоставено с newline-and-indent.

pow

dist

Ако маркирам всичко и направя нов отстъп (C-M-\), резултатът има повече смисъл:

pow-improveddist-improved

Използвам 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