tmux
powerline

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

More than 1 year has 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