曖昧文字幅を固定幅で表示する
ターミナルで日本語入力をしている時、特定の全角記号を入力すると、半角程度の幅で表示されることがあります。困ったことに、記号の表示位置がずれたり重複されて表示されたり、また折返し地点の文字が消えてしてしまいます。この問題は、設定である程度は軽減できますが、完全な対処法はないように思われます。
GUI環境であれば、VSCodeといった高性能なエディタを使うことで一応の解決ができますが、入力の度に文字列がチラつきます(VSCode ver 1.64.2)。
原因は曖昧文字幅
UTF-8には、曖昧文字幅と呼ばれる、幅が固定されていないフォントがあります。たとえば、★∀“”などの記号が曖昧文字幅になっているようです。ターミナルでは、これらが全角幅ではなく、半角幅で表示されていまダブルクォートは半角でも問題ありませんが、全角幅を期待している記号の場合は困ります。
全角幅で表示されてほしい文字が半角幅になっているのが分かります。理想は、次のような表示だと思います。
ターミナルの設定で曖昧文字幅を全角幅に固定にすることで問題を少しだけ軽減できます。ここでは、gnome-terminalで説明しますが、xtermやxfce4 terminal、またmacOSのtermnalやiTerm2にも同じような設定があると思います。
Terminalの設定
terminalの設定で曖昧文字幅を全角幅します。preference
のambiguous-width
をWide
に設定するだけです(初期値はNarrow
)。手っ取り早く簡単ですが、その精度には疑問があります。
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
にします。しかし、端末エミュレーターの設定を継承している可能性もあって、よく理解していません。
また、<C-L>
で画面の再描写が出来ます。