3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Emacsで指定範囲の全角半角変換

Last updated at Posted at 2022-08-14

japanese-hankaku-region (選択範囲を半角に変換)をキーバインド

GNU Emacsの関数japanese-hankaku-regionは、選択範囲の日本語の全角文字(JIS X0208)を(可能なら)半角に変換する。これはとても便利で頻繁に使うのでキーにバインドしておく。

japanese-hankaku-region

japan-util.el
(defun japanese-hankaku-region (from to &optional ascii-only)
  (interactive "r\nP")

という形になっている。引数fromtoは変換範囲。3番目のオプショナルな引数ascii-onlyは、nilでない値を指定すれば、ASCII文字に変換可能な文字だけが変換対象となる。つまり全角の英数字や一部の記号のみASCII文字に変換し、ひらがな、カタカナなどは変換しない。ascii-onlyを指定しなかったら、ひらがなやカタカナも半角カタカナに変換される。(そう、ひらがなも!)

インタラクティブな呼び出しの際には、interactiveの引数デスクリプタにより、fromtoは現在の選択範囲となってくれる…のだが、私は3番目のオプション引数ascii-onlyとしてtを指定したい。そのためにはfromtoも省略せず明示的に指定するしかない(と思った)ので、global-set-keyに指定するコマンドとしては次のようにラムダ式で記述せざるを得なかった。

init.el
(global-set-key (kbd "C-x C-h") '(lambda ()
				   (interactive)
				   (japanese-hankaku-region (region-beginning) (region-end) t)))

これを~/.emacs.d/init.elに加えておけば、Ctrl+x Ctrl+h の打鍵で現在の選択範囲の全角文字が半角ASCIIに変換されるようになる。

japanese-zenkaku-region (選択範囲を全角に変換)もキーバインド

japanese-zenkaku-regionはあまり使わないけど、対称の機能なので、ついでにバインドしておく。これもjapanese-hankaku-regionと同様に

japan-util.el
(defun japanese-zenkaku-region (from to &optional katakana-only)
  (interactive "r\nP")

という形になっているのだが、私にはkatakana-onlyの指定は必要なく、したがって、すべての引数を省略できるので、

init.el
(global-set-key (kbd "C-x C-z") 'japanese-zenkaku-region)

だけでOK。

長音がASCIIハイフンに変換されてしまう問題

バージョンによるかもしれないが、私が使っている GNU Emacs 27.1 (build 1, x86_64-w64-mingw32) では、ascii-only を指定した場合でも、カナの長音「ー」がASCIIのハイフンに変換されてしまう。たとえば「アーティスト」は「ア-ティスト」になってしまう。これはよろしくない。

その原因はjapan-util.elファイル内の japanese-symbol-tableにあった。このテーブルの中に (?ー ?- ?ー) があったので、これを削除してbyte-compileして解決。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?