Emacsのalignが便利

投稿者: shuichi, タグ: ,,,,, 投稿日時: 2009/04/08 21:50

Emacsのalignがけっこう便利。桁揃えが簡単になるので、特にコーディングするときに重宝する。例えば次のようなコードがあるとする。

input HCLK; // Clock
output [31:0] HADDR; // Address
output [1:0] HTRANS; // Transfer type
output HWRITE; // Transfer direction
output [2:0] HSIZE; // Transfer size
output [2:0] HBURST; // Burst type
output [31:0] HWDATA; // Write data
input [31:0] HRDATA; // Read data
input HREADY; // Transfer done

そして次に示すコマンドを実行してみる。

コードをリージョンで選択→M-x align-regexp→Align regexp: \[
コードをリージョンで選択→M-x align-regexp→Align regexp: H
コードをリージョンで選択→M-x align-regexp→Align regexp: //

するとコードが次のように桁揃えされる。

input         HCLK;   // Clock
output [31:0] HADDR;  // Address
output [1:0]  HTRANS; // Transfer type
output        HWRITE; // Transfer direction
output [2:0]  HSIZE;  // Transfer size
output [2:0]  HBURST; // Burst type
output [31:0] HWDATA; // Write data
input  [31:0] HRDATA; // Read data
input         HREADY; // Transfer done

同じようなことを3回繰り返しているのでちょっと面倒だが、手作業でやるよりはマシだと思う。どこで桁揃えするかを正規表現で指定できるのでかなり応用が利く。場合によっては余計面倒になるかもしれないが…。

ちなみにC-u M-x align-regexpでもう少し複雑なことができる。詳細はEmacsWiki: Align Commandsを参照。さらに、桁揃えのルールをあらかじめ定義しておくことができるので、これを定義しておけばもっと便利になりそう。

Emacs(verilog-mode)でVerilogの数値リテラルを強調表示

投稿者: shuichi, タグ: ,,,, 投稿日時: 2009/04/02 02:01

Emacsのverilog-modeでは数値リテラルが強調表示されないので、以下のコードで対応。

(font-lock-add-keywords
 'verilog-mode
 '(("\\(\\<[1-9][0-9_]*\\)?'h[0-9_a-fxz]+\\>" . font-lock-number-face)
   ("\\(\\<[1-9][0-9_]*\\)?'d[0-9_xz]+\\>"    . font-lock-number-face)
   ("\\(\\<[1-9][0-9_]*\\)?'o[0-7_xz]+\\>"    . font-lock-number-face)
   ("\\(\\<[1-9][0-9_]*\\)?'b[01_xz]+\\>"     . font-lock-number-face)
   ("\\<[0-9][0-9_]*\\>"                      . font-lock-number-face)))

フェイスは好きなものを指定する。ちなみに32'D0とか5e3とか0xとかには未対応。使わないので。

Emacsを本格的に使い始めて1ヶ月もたっていないので間違いがあるかもしれないけど、とりあえず強調表示はできてる。Verilogを書くにはEmacsのverilog-modeが一番便利っぽい。