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

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

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

Linux (29) MobaXterm (5) Mosh (5) SSH (6) Ubuntu (27) 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接続(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)の表示が崩れる問題の調査と対策」で取り上げていた問題も解決しました。表示崩れ(二重表示)が発生しなくなりました。

コメント(0)

新しいコメントを投稿




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

    ブログが趣味で、スマホアプリの利用中に発生するトラブルや不具合の対策手順や障害情報、 設定の変更方法などについて、解説記事をよく書いています。

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

    最近の関心は、スマホやパソコンが苦手な人の行動や思考、そしてそんな人を手助けする方法です。

    Amazonのアソシエイトとして、did2は適格販売により収入を得ています。

    RSS | Facebook | Twitter | About