我一直在尝试在批处理模式下使用emacs来精心打印一个ActionScript文件,但它并不能够做到我期望的。我从这里下载了ActionScript mode.el和as-config.el http://blog.pettomato.com/?p=12并将它们放入我的主目录中,将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击是执行代码样式指南的好手段。

有帮助吗?

解决方案

您在这里遇到了几个问题。我将首先处理小问题。

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

  2. 执行emacs时 --batch, , 这 ”行动论点“ (像 -l从左到右按顺序评估)。所以为时已晚 -l actionscript-mode.el 您已经加载并保存了文件后。

  3. 更好的emacs编码样式可以致电 (point-min) 为了获得(可见的部分)缓冲区和 (point-max) 要结束缓冲区。 (在这种情况下没什么大不了的,但是正确的事情很高兴。)

因此,您的外壳脚本应该看起来像以下内容。 (我已经全部书写了所有选项,以最大程度地清楚。)

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

现在,解决主要问题。您想移动打开括号,以便它们出现在线的末端,而不是在线路的开头。命令 indent-region 不会为您执行此操作 - 它只会在您给出的线路上添加或删除缩进。因此,对于您的应用程序,您实际上需要编辑文件。例如,您可以将此参数添加到批处理脚本(在调用到 actionscript-mode 在打电话之前 indent-region):

      --execute='(replace-regexp " *\n *{" " {")' 

这有点粗糙,可能会错误地移动一些牙套(例如,字符串内的牙套),但对于您的应用程序可能足够好。再次询问您是否仍然有麻烦。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top