2

バッチモードでemacsを使用してActionScriptファイルをきれいに印刷しようとしていますが、期待どおりの結果が得られません。ここhttp://blog.pettomato.com/?p=12から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ヒットすることが、コードスタイルガイドを適用するための良い代替手段であるかどうかはわかりません。

4

1 に答える 1

4

ここでいくつかの問題が発生しています。最初に小さな問題に対処します。

  1. .emacsバッチコマンドを配置するのに適した場所ではありません。この.emacsファイルは個人用の設定ファイルであり、Emacsをインタラクティブに起動するたびに実行されます。バッチコマンドをインタラクティブに実行する必要はありません。

  2. Emacsをで実行すると--batch、「アクション引数」(のような-l)が左から右の順に評価されます。-l actionscript-mode.elしたがって、ファイルをすでにロードして保存した後で行うには遅すぎます。

  3. (point-min)バッファ(の可視部分)の先頭を取得し(point-max)、バッファの末尾を取得するために呼び出す方が、Emacsのコーディングスタイルとして優れています。(この場合は大したことではありませんが、問題を解決するのは良いことです。)

したがって、シェルスクリプトは次のようになります。(わかりやすくするために、すべてのオプションを完全に書き留めました。)

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 *{" " {")' 

これは少し粗雑で、一部の中括弧(文字列内の中括弧など)を誤って移動する可能性がありますが、アプリケーションには十分な場合があります。それでも問題が解決しない場合は、もう一度質問してください。

于 2010-11-04T16:48:35.853 に答える