Windows 如何为汇编编程设置Emacs并修复缩进?
如何为汇编编程设置Emacs并修复缩进 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:
全局
、外部
和部分
关键字缩进为代码
我希望这些关键字左对齐。如何做到这一点
此外,是否有值得推荐的汇编编程好模式
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)