Vimで編集中のErlangのインデントを整える

Vim 7.4 には vim-erlang-runtime が同梱されているので、特にプラグインを入れなくても Erlang コードのシンタックスハイライトやインデントの面倒を見てくれます。 ただし、一部のインデントは期待通りにならないため手動で整える必要があります。 この手動で整える作業が面倒なので、Emacs の erlang.el が提供するインデント機能を Vim から利用して整えるようにします。

erlang.el

Erlang のインデントは erlang.el が提供するインデント機能を使うことが推奨されているらしく、rebarドキュメント にも erlang.el の erlang-mode を使用してインデントすることが望ましいと書かれています。 erlang.el は Erlang の配布物に同梱されているので 公式 などからダウンロードして Erlang をインストールした場合はすでにインストールされていると思います。 ディストリビューションのパッケージからインストールした場合は、erlang.el が別のパッケージで提供されている可能性があります。 Fedora の場合は本体の erlang パッケージとは別の emacs-erlang パッケージで提供されています。 また、MELPA に登録されているので package.el を使ってインストールすることもできます。

erlang.el のインデント機能を Vim から利用する

下記のスクリプトを適当な名前で保存して、Vim の equalprg オプションにそのパスを設定します。 --directory オプションには erlang.el のインストール先のディレクトリを渡す必要があります。 公式からダウンロードして ~/local にインストールした場合は ~/local/lib/erlang/lib/tools-*/emacs を指定します。

#!/bin/bash

emacs \
  --batch \
  --quick \
  --directory ~/local/lib/erlang/lib/tools-*/emacs \
  --insert <(cat) \
  --eval "
(progn
  (require 'erlang-start)
  (erlang-mode)
  (erlang-indent-current-buffer)
  (delete-trailing-whitespace)
  (untabify (point-min) (point-max))
  (princ (buffer-string))
  )
" 2> /dev/null

注意点として、erlang.el のインデントスタイルはタブ・スペース混在です。 上記のスクリプトではインデントを整えたあとに、untabify を呼び出してタブをスペースに展開しています。 デフォルトのインデントスタイルに従う場合は untabify の呼び出しを消してください。

参考

  • Published:
  • Tags:Vim, Erlang