スポンサーリンク
zshでtab補完したとき、最初の2文字が消えずに残る変な問題が発生しました。例えば「ls」の次にtabを押すと、「lsls」となったりします。消えずに最初の2文字が残ってしまいます。この問題について。
設定をいろいろと変えているうちに発症したようなのですが、変更していた設定は戻したはずなのに元に戻らず、困ってしまいました。
そこでその原因について切り分けを行い、対策設定を見つけることができたので、そのときのことを紹介します。
スポンサーリンク
環境
- Ubuntu 16.04.2
- zsh(oh-my-zsh + xxf)
- MobaXterm + Windows 10
- Moshでは発生せず、SSHでのみ発生
locale設定関連の問題?
少し調べてみると、ちょうど同じ症状についての書き込みが見つかりました(しかもoh-my-zsh)。
if i type ls then tab i get lsls and the doing a backspace only removes ls. (引用元)
これに対して、unicode bug と指摘されており、そのあたりと関連していそうでした。
This looks like a tmux unicode bug. Upgrade tmux. (引用元)
locale確認
そこで、localeコマンドを実行してみると、結果は次の通りになりました。
$ locale LANG=en_US LANGUAGE=en_US: LC_CTYPE=en_US LC_NUMERIC="en_US" LC_TIME="en_US" LC_COLLATE="en_US" LC_MONETARY="en_US" LC_MESSAGES="en_US" LC_PAPER="en_US" LC_NAME="en_US" LC_ADDRESS="en_US" LC_TELEPHONE="en_US" LC_MEASUREMENT="en_US" LC_IDENTIFICATION="en_US" LC_ALL=
「UTF-8」の記載が一切無いことが気になります。
一方、Mosh接続(Mobile SSH接続)の場合は、Moshクライアント側から上書きしているのか、次の通り、UTF-8の記載がありました。
$ locale LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=en_US.UTF-8
怪しいです。
このとき、/etc/default/locale は、
LANG=en_US LANGUAGE="en_US:"
でした。また、「locale -a」の結果は、
$ lolocale -a C C.UTF-8 en_US en_US.iso88591 en_US.utf8 POSIX
です。
ja_JP.UTF-8
いろいろ試行錯誤してもダメだったので方針を変えて、ja_JPを導入してみることにしました。
$ sudo apt install language-pack-ja $ sudo update-locale LANG=ja_JP.UTF-8 *** update-locale: Warning: LANGUAGE ("en_US:") is not compatible with LANG (ja_JP.UTF-8). Disabling it.
結果、「locale -a」の結果に「ja_JP.utf8」が追加されました。
再接続 → 解決
一度SSHを再接続したところ、タブ補完の問題が発生しなくなりました。
localeコマンドの結果にも、UTF-8が付くようになっています。
$ locale LANG=ja_JP.UTF-8 LANGUAGE= LC_CTYPE=ja_JP.UTF-8 LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
Moshでの表示崩れも回復
これに伴い、「【Ubuntu 16.04】MobaXterm(mosh)+byobu(tmux)の表示が崩れる問題の調査と対策」で取り上げていた問題も解決しました。表示崩れ(二重表示)が発生しなくなりました。
スポンサーリンク
スポンサーリンク