作曲・浄書・指導・音響

金沢音楽制作

金沢音楽制作では、楽曲・楽譜の制作と、作曲や写譜などレッスンを行っています。

曖昧文字幅を固定幅で表示する

ターミナルで日本語入力している時。特定の全角記号を入力すると、全角のはずなのに、半角程度の幅で表示されるものがある。また、それ以降の表示がずれたり、消えたりしてしまう場合がある。その対処法のメモ。

原因は曖昧文字幅

UTF-8には、曖昧文字幅と呼ばれる、幅が固定されていないフォントがある。主として、★∀などの記号が曖昧文字幅になっている。したがって、ターミナルでは、これらが半角幅で表示されてしまう。しかし、ユーザーは、全角幅を期待している。

ambiguous-width_1.png
記号が崩れて表示されている

全角幅で表示されてほしい箇所が半角幅になっているのがわかる。理想は、次のような表示である。

ambiguous-width_2.png
記号が正しく表示されている

ターミナルの設定で曖昧文字幅を全角幅に固定にすることで一応の解決ができる。筆者は、gnome-terminalを使用しているので、gnome-terminalで説明する。

[目次へ]

Terminalの設定

terminalの設定で曖昧文字幅を全角幅するのが、もっとも手っ取り早く、また簡単である。その手順は、preferenceのambiguous-widthをWideに設定するだけである(初期値はNarrow)。

ambiguous-width_3.png

GNOME Terminal以外の端末エミュレーターは使っていないので詳細は分からないが、xtermやxfce4 terminalで設定可能のようである。

[目次へ]

Vimの設定

念の為、Vimでも曖昧文字幅を全角幅に設定しておく。

Vimなら~/.vimrc、Neovimなら~/.config/nvim/init.vimに次の命令を記述する。

$ vi ~/.vimrc
set encoding-utf8
if exists('&ambw')
  set ambiwidth=double
endif

事前にエンコードをUTF-8に設定しておく必要がある。なぜならば、曖昧文字幅は、UTF-8の問題だからだ。なお、半角幅(ASCII)にする場合は、narrowではなく、ambiwidth=singleにする。とはいえ、ここらへんは、端末エミュレーターの設定を継承している可能性があって、よく分かっていない。そのうち検証したいと思う。

全角幅にする弊害

曖昧文字幅を全角幅にすることで弊害もある。曖昧文字列を想定していないアプリケーションである。たとえば、tmuxでペインをした時の罫線表示がおかしくなったり、別の記事で書いた「nmtuiの表示崩れ対策」がそうである。なお、筆者は、tmuxでペインを使わないので放置している。

環境によっては次の記述で直るらしいが、筆者の環境では無理だった。

$ vi ~/.tmux.conf
set -ag terminal-overrides ',*:U8=0'

[目次へ]

[ノート一覧へ]

  • 公開日:2020-04-07