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ってので区切りをみてるみたいです。空行とか{}によるブロックとかで見てるっぽい