Emacs (ESS) で SAS のシンタックスハイライトを直す
はじめに
今回は小ネタです。
みなさんは SAS コードを何で書いてますか? Atom? Sublime Text? Vim? Emacs? 僕は Emacs で書いてますが、エディタの好みは人それぞれなので、好きな物を使えばいいと思います。
さて、Emacs で SAS を編集する際に便利なのが ESS(Emacs Speaks Statistics) というパッケージです。 これは統計系の言語に対してシンタックスハイライトや補完をしてくれるもので、対応言語は以下のとおりです。
ここに SAS が含まれているのでこれを使えばいいのですが、この SAS-mode のシンタックスハイライトがデフォルトでは少しおかしいです。
たとえば、proc sql
や proc fedsql
を使ったコードを書こうとすると下図のようになってしまいます。
まず、プロシージャ名fedsql
が認識されていません。これはいろいろ試した結果、どうやら SAS 9.4 で追加された、あるいは試用版として追加
されたプロシージャが ESS では認識されないようです。
次に、SQL のキーワードが一部ハイライトされていません。この原因ははっきりしないのですが、大変に気持ち悪いです。
シンタックスハイライトを直す
ESS での SAS のシンタックスハイライトの設定は ~/.emacs.d/elpa/ess-20161101.215/lisp/ess-sas-l.el
のSAS-mode-font-lock-defaults
という変数で定義されているのでそこにリストとして追加します。
ただ、パッケージそのものをいじるのはよろしくないので、init.el
に書くこととします。
SAS 9.4 のプロシージャを追加する
プロシージャ名は font-lock-constant-face
の色になるので、init.el
に以下のように書きます。
;; シンタックスハイライトを追加(for SAS 9.4)------ (add-to-list 'SAS-mode-font-lock-defaults (cons (concat "\\<proc[ ]+" (regexp-opt '("bchoice" "fedsql" "iclifetest" "irt" "irphreg" "spp" "datekeys" ) 'words)) font-lock-constant-face) )
このように、追加したいプロシージャ名をべた書きします。
SQL のキーワードを追加
上と同じ要領です。ただ、キーワードは font-lock-keyword-face
の色になります。
;; -SQL のキーワードを追加----- (add-to-list 'SAS-mode-font-lock-defaults (cons (concat (regexp-opt '("as" "create" "group" "order" "from" "on" "inner join" "left outer join" "right outer join" "cross join" "full join" "union" "having" "case" "when" ;; "&" ) 'words)) font-lock-keyword-face) )
これらの設定を反映してみると、
きちんとハイライトされてますね! これで気持ち悪さから解放されました!