Я использую это в своем ~/.emacs
в Linux, чтобы настроить asm-режим, что делает его достаточно пригодным для синтаксиса 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)
При нажатии клавиши ввода автоматически изменяется отступ строки, на которой ранее находился курсор. Нажмите control-O, чтобы вставить новую строку без запуска автоматического отступа.
Enter всегда переводит вас в столбец 4. Если вы наберете что-то вроде .my_loop:
, он будет иметь неправильный отступ, пока вы не нажмете клавишу возврата, поэтому нужно немного привыкнуть к быстрому вводу и не ожидать, что вам нужно будет вернуться и исправить отступ на строку после нажатия 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