Actionscript 3 使用Emacs漂亮地打印ActionScript 3.0

Actionscript 3 使用Emacs漂亮地打印ActionScript 3.0,actionscript-3,actionscript,emacs,pretty-print,reformat,Actionscript 3,Actionscript,Emacs,Pretty Print,Reformat,我一直尝试在批处理模式下使用emacs来打印ActionScript文件,但它并没有达到我预期的效果。 我从这里下载了actionscript-mode.el和as-config.el 并将它们放入我的主目录,将actionscript-mode.el复制到我的工作目录中。 然后,我在我的主目录中创建了一个文件“.emacs”,其中包含以下内容: (load "~/actionscript-mode.el") (actionscript-mode) (indent-region 0 (buffe

我一直尝试在批处理模式下使用emacs来打印ActionScript文件,但它并没有达到我预期的效果。 我从这里下载了actionscript-mode.el和as-config.el 并将它们放入我的主目录,将actionscript-mode.el复制到我的工作目录中。 然后,我在我的主目录中创建了一个文件“.emacs”,其中包含以下内容:

(load "~/actionscript-mode.el")
(actionscript-mode)
(indent-region 0 (buffer-size)  nil)
(save-buffer)
然后我转到包含格式不正确的.as文件的目录,并在命令行上运行此命令:

emacs -batch WrongFormat.as -l ~/.emacs -l actionscript-mode.el

And I get:

Loading /Users/pnm/actionscript-mode.el (source)...
Indenting region...
Indenting region... done
(No changes need to be saved)
现在的问题是:

如何让emacs重新格式化花括号,使其不在新的行中?
我越来越绝望了,我不确定用木棍击打50下是否是执行代码风格指南的一个好的替代方法。

您在这里遇到了几个问题。我会先处理一些小问题

  • .emacs
    是放置批处理命令的不好地方。
    .emacs
    文件是您的个人配置文件,每当您以交互方式启动emacs时,它都会运行。您不希望批处理命令以交互方式执行

  • 当使用
    --batch
    执行Emacs时,将按从左到右的顺序计算“”(如
    -l
    )。因此,在加载并保存文件后再执行
    -l actionscript mode.el
    已经太晚了

  • 更好的Emacs编码方式是调用
    (最小点)
    获取缓冲区的开始(可见部分),调用
    (最大点)
    获取缓冲区的结束。(在这种情况下没什么大不了的,但把事情做好很好。)

  • 因此,您的shell脚本应该如下所示。(为了最大程度地清晰起见,我已将所有选项全部写出来。)

    现在,谈谈主要问题。您希望移动大括号,使其显示在线的末尾,而不是线的开头。命令
    indent region
    不会为您执行此操作,它只会在您指定的行中添加或删除缩进。因此,对于您的应用程序,您实际上需要编辑文件。例如,您可以将此参数添加到批处理脚本中(在调用
    actionscript mode
    之后和调用
    indent region
    之前):

    这有点粗糙,可能会错误地移动一些大括号(例如,字符串中的大括号),但对于您的应用程序来说可能已经足够好了。如果你还有麻烦,再问一次

    emacs --batch \
          --load=~/actionscript-mode.el \
          --visit=FILE \
          --funcall=actionscript-mode \
          --execute='(indent-region (point-min) (point-max))' \
          --funcall=save-buffer
    
          --execute='(replace-regexp " *\n *{" " {")'