Emacsで文字クラスの置換ってどうやるのかな
Emacsで全角の数字を半角にしたい、というので、以下のように書いた。
(defun numerics-to-hankaku () (interactive) (tr '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9") '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))) (defun tr (before after) (goto-char (point-min)) (replace-string (car before) (car after)) (if (cdr before) (tr (cdr before) (cdr after))))
RubyでいうRangeオブジェクトのリテラルとかってないのかな。
しかし、実はGNU Emacsにはjapanese-hankaku-regionという標準の関数が用意されているのだった。
;; zenkaku to hankaku (defun charclass-to-hankaku-buffer (reg) (save-excursion (goto-char (point-min)) (while (re-search-forward reg (point-max) t) (japanese-hankaku-region (match-beginning 0) (match-end 0))))) (defun numerics-to-hankaku () (interactive) (charclass-to-hankaku-buffer "[0-9]+")) (defun alphabets-to-hankaku () (interactive) (charclass-to-hankaku-buffer "[a-zA-Z]+")) (provide 'zenhan)