php-modeで無理やりM-x alignしてみる

元々自分はアラインメントしない人だったんですが、最近、職場でアラインメントされたコードを読んで(phpじゃないけど)、やっぱり読みやすいなーと感じ、郷に入れば郷に従おうということで最近EmacsのM-x align & M-x align-regexpにはまってます。

int foo = 100;
char *bar = "hogehoge";
int     foo = 100;
char *bar = "hogehoge";

alignってのはリージョン指定した所を、こんな感じに整えてくれるやつですね。
こんなかんじで宣言が並んでたら、リージョンしなくてもM-x align-currentでやってくれます。*1便利。
M-x align-regexpは自分で区切りを指定できるので、行末のコメント位置なんかをあわせるときなんかに便利。


前書きが長くなりましたが、久々にphpを書いててalignしてみると何も反応しないので、align.elを読みつつ下記のように設定してみた。

(add-hook 'php-mode-user-hook
          '(lambda ()
             (require 'align)
             (setq align-perl-modes (cons 'php-mode align-perl-modes))))

php-modeにperlのalignを使う。変数の代入くらいにしか使わないから今のところ特に問題なし。

<?php
$int = 1000;
$float = 3.14159;
$object = new stdClass();
$string = "string";
?>
<?php
$int    = 1000;
$float  = 3.14159;
$object = new stdClass();
$string = "string";
?>

ちなみに最初はalign-c++-modeにしてたんですが、arrayの「=>」をちゃんと見てくれないのでやめた。


あ。でもこんな感じで並んでるとちゃんとそろえてくれない。今度php用を書いてみるか。php用を書いてみました。

<?php
$int = 1000;
$num1 += $num2;
$string1 .= $string2;
?>

*1:sectionってので区切りをみてるみたいです。空行とか{}によるブロックとかで見てるっぽい