Използвам това в моя ~/.emacs
на Linux, за да персонализирам asm-mode, което го прави доста използваем за синтаксиса на NASM и умерено добър за синтаксиса на GAS. (Осветяването на синтаксиса и т.н. използва ;
като знак за коментар, така че GAS с #
е бъркотия. Не съм търсил да променя това).
Дедефинирам нещото с електрически коментари, така че мога да напиша ;
без asm-mode, предполагайки, че знае къде искам коментара.
Настроих някои регулярни изрази, за да задам колоната с отстъп на 0 за директива %nasm_macro
, global
, section
и етикети (завършващи с :
)
(defun my-asm-mode-hook ()
;; you can use `comment-dwim' (M-;) for this kind of behaviour anyway
(local-unset-key (vector asm-comment-char))
;; (local-unset-key "<return>") ; doesn't work. "RET" in a terminal. http://emacs.stackexchange.com/questions/13286/how-can-i-stop-the-enter-key-from-triggering-a-completion-in-company-mode
(electric-indent-local-mode) ; toggle off
; (setq tab-width 4)
(setq indent-tabs-mode nil)
;; asm-mode sets it locally to nil, to "stay closer to the old TAB behaviour".
;; (setq tab-always-indent (default-value 'tab-always-indent))
(defun asm-calculate-indentation ()
(or
;; Flush labels to the left margin.
; (and (looking-at "\\(\\.\\|\\sw\\|\\s_\\)+:") 0)
(and (looking-at "[.@_[:word:]]+:") 0)
;; Same thing for `;;;' comments.
(and (looking-at "\\s<\\s<\\s<") 0)
;; %if nasm macro stuff goes to the left margin
(and (looking-at "%") 0)
(and (looking-at "c?global\\|section\\|default\\|align\\|INIT_..X") 0)
;; Simple `;' comments go to the comment-column
;(and (looking-at "\\s<\\(\\S<\\|\\'\\)") comment-column)
;; The rest goes at column 4
(or 4)))
)
(add-hook 'asm-mode-hook #'my-asm-mode-hook)
Натискането на enter автоматично отстъпва реда, на който преди е бил курсорът. Натиснете control-O, за да вмъкнете нов ред, без да задействате автоматично отстъп.
Enter винаги ви отвежда до колона 4. Ако въведете нещо като .my_loop:
, отстъпът ще бъде грешен, докато не натиснете return, така че е необходимо малко свикване да пишете бързо и да не очаквате да се върнете назад и да коригирате отстъпа на ред след натискане на enter.
Натискането на TAB автоматично ще направи отстъп на ред, но повторното натискане ще направи отстъп до следващия разделител.
Emacs 25.3.1 на Arch Linux, редактиране на отговор в процес на код-голф. (Направих прозореца малък само за целите на екранната снимка, разбира се.) Всички тези редове са с естествения си отстъп. Коментарите са предимно в колоната, в която meta-;
ги поставя.
![въведете описание на изображението тук](https://i.stack.imgur.com/Cs5hw.png)
person
Peter Cordes
schedule
14.06.2018
~/.emacs
файл. Последният път, когато се опитах да деактивирам електрическа точка и запетая по подразбиране, не се получи (с(add-hook 'asm-mode-hook #'my-asm-mode-hook)
за изпълнение на функция, която дефинирах по-рано, която изпълнява(local-unset-key (vector asm-comment-char))
. Товаlocal-unset-key
работи, ако го стартирам ръчно (M-x eval-expression
). Вероятно трябва да отделя известно време да науча персонализирането на emacs по-добре, ако смятам да продължа да го използвам през цялото време. - person Peter Cordes   schedule 30.07.2016