Help us understand the problem. What is going on with this article?

tmux + Powerline が上手く動作しない場合の確認ポイント

More than 3 years have passed since last update.

公式ドキュメントや先人達の Qiita 投稿を参考に、tmux + Powerline の環境構築を行いました。
その際に上手く動作せずハマったのでメモを書いておきます。

環境

  • OS X El Capitan
  • iTerm 2
  • tmux 2.1 (brew で install)

経緯

以下のコマンドで必要なパッケージをインストール。

pip install --user powerline-status

続いて .tmux.conf に以下の行を追加しました。

tmux.conf
run-shell "powerline-daemon -q"
source "/Users/USER_NAME/Library/Python/2.7/lib/python/site-packages/powerline/bindings/tmux/powerline.conf"

最後に patch をあてたフォントをインストールし、最低限の動作環境が整ったかと思いました。
この状態で tmux は起動し、エラー等も表示されないようですが、ステータスラインはカッコよく表示されないという問題が発生しました。
tmux1.png

これには 2 つの問題が潜んでいました。

問題1: powerline-daemon への PATH が通っていない

.tmux.conf の内容を見ると、 run-shell でシェルコマンドを実行しているようです。
powerline-daemon への PATH が通っているかを確かめてみると、コマンドが見つからないと言われてしまいました。

% which powerline-daemon
powerline-daemon not found

powerline 関連コマンドは ~/Library/Python/2.7/bin 内に配置されているようでした。
シェルの設定ファイルに以下の行を記述し、コマンドへの PATH を通しました。

.zshrc
export PATH="$HOME/Library/Python/2.7/bin:$PATH"
% which powerline-daemon
/Users/USER_NAME/Library/Python/2.7/bin/powerline-daemon

問題2: ValueError: unknown locale: UTF-8

PATH が通った状態で tmux コマンドを打ってみましたが、ステータスラインの表示は変わらず正常に動作していないようでした。
試しに powerline-daemon をシェル上で直接実行してみたところ ValueError: unknown locale: UTF-8 が発生していることがわかりました。

% powerline-daemon
Traceback (most recent call last):
  File "/Users/USER_NAME/Library/Python/2.7/bin/powerline-daemon", line 18, in <module>
    from powerline.commands.main import finish_args, write_output
  File "/Users/USER_NAME/Library/Python/2.7/lib/python/site-packages/powerline/commands/main.py", line 17, in <module>
    encoding = get_preferred_arguments_encoding()
  File "/Users/USER_NAME/Library/Python/2.7/lib/python/site-packages/powerline/lib/encoding.py", line 77, in get_preferred_arguments_encoding
    locale.getdefaultlocale()[1]
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 543, in getdefaultlocale
    return _parse_localename(localename)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 475, in _parse_localename
    raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8

この問題は、こちらの blog 記事を参考にさせていただきました。sphinx で ValueError: unknown locale: UTF-8 というエラーが出た
Mac では LC_ALL 環境変数が空になっていることがあるそうです。シェルの設定ファイルに以下を追記します。

.zshrc
export LC_ALL='ja_JP.UTF-8'

この状態で tmux コマンドを実行したところ、ステータスラインのデザインが変わり、動作することが確認できました。
tmux2.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away