情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

zshでtab補完したときに最初の2文字が消えずに残る問題の対策メモ

Linux (27) MobaXterm (5) Mosh (5) SSH (6) Ubuntu (25) Ubuntu 16.04 (6)

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接続の場合は、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)の表示が崩れる問題の調査と対策」で取り上げていた問題も解決しました。表示崩れ(二重表示)が発生しなくなりました。

コメント(0)

新しいコメントを投稿




  • カテゴリ ナビ
  • 著者紹介

    ブログが趣味で、 月間1,000万PV を達成しました。

    自分が困ったことをブログに書けば、次に困る人の参考になって、みんながみんな同じ苦労をせずに済む、というのが原点です。

    最近の関心は、スマホやパソコンに詳しくない人の行動や思考、 そしてそんな人を手助けする方法や枠組み。 また、それに関連するような、"身近な"セキュリティ。

    ※SNS(特にTwitter)でシェアされた記事は、内容の追加・更新を行っています。 必ず、ではありませんが、気に入った記事は積極的にシェアしてみてください。

    RSS | Facebook | Twitter | About