Windows 如何为汇编编程设置Emacs并修复缩进?

Windows 如何为汇编编程设置Emacs并修复缩进?,windows,assembly,emacs,Windows,Assembly,Emacs,如何为汇编编程设置Emacs并修复缩进 Emacs以一种恼人的方式缩进了一些指令 特别是,下面的全局、外部和部分关键字缩进为代码 我希望这些关键字左对齐。如何做到这一点 此外,是否有值得推荐的汇编编程好模式 global _main extern _printf section .text _main: push msg call _printf add esp, 4 ret msg:

如何为汇编编程设置Emacs并修复缩进

Emacs以一种恼人的方式缩进了一些指令

特别是,下面的
全局
外部
部分
关键字缩进为代码

我希望这些关键字左对齐。如何做到这一点

此外,是否有值得推荐的汇编编程好模式

        global _main
        extern _printf
        section .text
_main:
        push msg
        call _printf
        add esp, 4
        ret
msg:
        db 'HelloWorld', 0

语法突出显示在asm模式下工作,但:


我在Linux上的
~/.emacs
中使用它来定制asm模式,使其对NASM语法相当可用,而对GAS语法则相当合适。(语法突出显示等使用
作为注释字符,因此使用
#
的GAS是一团乱。我还没有考虑过改变这一点)

我取消了电子注释的定义,这样我就可以键入
没有asm模式,假设它知道我想要注释的位置

我设置了一些正则表达式,将
%nasm_宏
指令、
全局
和标签的缩进列设置为0(以
结尾)

(取消asm模式挂钩()
不管怎样,这种行为都可以使用“comment dwim”(M-;)
(本地未设置键(矢量asm注释字符))
;;(本地未设置键“”);不起作用。在终端中为“RET”。http://emacs.stackexchange.com/questions/13286/how-can-i-stop-the-enter-key-from-triggering-a-completion-in-company-mode
(电缩进本地模式);关闭
;(设置选项卡宽度4)
(setq缩进制表符模式nil)
;asm模式将其本地设置为nil,以“更接近旧的选项卡行为”。
;;;(setq制表符始终缩进(默认值“制表符始终缩进”)
(定义asm计算缩进()
(或
;将标签齐平到左边距。
;(和(看“\\(\\\\\\\\\\\\\\\\\\\\\\\\\\\\s\\\\\)+:”)0)
(和(看“[。@[:word:]+:”)0)
对于“;;;”注释也是这样。

(和(查看“\\s我对emacs的“汇编程序”模式从来都不是很满意,但也没有找到更好的模式。电子分号不太好用,如果你不禁用它,在注释一行或其他内容时,你必须一直与之抗争。你对替代方法的建议是什么(编辑器)另外,我如何定制Emacs的默认ASM模式?我仍然使用Emacs;就像我说的,我没有费劲去寻找更好的东西,我喜欢C++的C/Ec++/shell的Emacs。你可以编辑你的<代码> ~//Emacs < /Cube >文件来定制Emacs模式。(添加hook'asm mode hook#'my-asm-mode-hook)
以运行我之前定义的函数,该函数运行
(本地未设置键(矢量asm注释字符))
。如果手动运行
本地未设置键
,则
可以工作(
M-x eval expression
)。如果我要一直使用emacs定制,我可能应该花一些时间更好地学习emacs定制。指令应该在第二列。只有标签属于第一列。无论我在哪里看到你都会给出最好的答案:)我的猜测只适用于x86_64 at&t语法,但我编写了一个用于使我的生活更轻松的glibc工具。在我看来,很好地钩住了emacs。你可能会喜欢它。
(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)