VHDLを整形(format)したい
VHDLを記述していると、とくにXilinxのISEではコードの整形が結構めんどうです。EclipseだとShift+Command+Fとすると、自動的に指定したルールにもとづいてフォーマットしてくれて、authorによらず統一的な見た目にできますが、残念ながらEclipseのVHDLプラグインはいいものがありません。 そこへくると、Emacsはさすが機能豊富で、整形機能付きの「VHDLモード」を持っています。 MacにインストールされているEmacsでは、.vhdや.vhdlという拡張子のファイルを開くと自動的にVHDLモードになり、 syntax coloringをしてくれます。このモード内で、
Ctrl+C をしたあと、 Ctrl+B
すると、コードが整形されます。以下がその例。
Emacs VHDLモードのオフィシャルページはEmacs VHDL Modeにあります。 作者やメンテナのReto ZimmermannさんとRod Whitbyさんに感謝! Thank you Reto and Rod for very nice contribution, the Emacs VHDL mode!
[tmkm-amazon]4774156515[/tmkm-amazon]
コマンドラインからバッチ処理(スクリプティング等で利用する)
以下のようにすると、emacsの画面そのものは起動せずに、ファイルを開いて整形した後、保存して自動終了してくれます。emacs -batch -l ~/.emacs (整形したいファイル名) -f vhdl-beautify-buffer 例: emacs -batch -l ~/.emacs SpaceWireCodec.vhdl -f vhdl-beautify-buffer
HongoScriptsから利用する
HongoScriptsに入っている、hsVHDLBeautifyというコマンドを使うと、下記の「改行コード問題」や「process~begin一行に入っている問題」を自動的に解決したうえで整形を実行できます。まだHongoScriptsをインストールしていない人は、Homebrewをインストールしてから、brew tap yuasatakayuki/hxisgd brew install hongoscriptsとしてインストールしてください。すぐにhsVHDLBeautifyが使えるようになります。 コマンドラインから
hsVHDLBeautify (VHDLファイル)として実行してください。
不具合(?)と注意するべき点
- ぼくの環境では、process文と同じ行にbeginが入っているとうまく整形されなかったので、 Ruby等でprocessとbeginを分けてからemacsに処理させました。
うまく行かない例: process (clk,reset) begin ... end process; 大丈夫な例: process (clk,reset) begin ... end process;
- Windowsから持ってきたファイルは改行コードがCR+LFになっていて、それだけならいいのですが、 途中でMacで編集しWindowsでも再編集したファイルだと、CR+LFとLFが混ざっているせいで、 beautifyがうまく働かないことがあるようです。 事前にCotEditorやnkfコマンド等で改行コードをLFオンリーに変換してから実行してみましょう。
改行コードをUNIX/MacのLFだけにする例: nkf --unix file.vhdl > file_LF.vhdl
nkfはHomebrewを用いてbrew install nkf
とすると手軽にインストールできます。