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

tmux v2.9 マイグレーションガイド 〜 tmux をv2.9 に上げたらinvalid option エラーが出た

More than 1 year has passed since last update.

tmux をv2.9 にアップグレードしたら出たエラー

tmux をv2.9 にアップグレードすると以下のようなエラーが出るようになりました。

/home/your-name/.tmux.conf:9: invalid option: pane-active-border-fg
/home/your-name/.tmux.conf:10: invalid option: message-bg
/home/your-name/.tmux.conf:12: invalid option: status-right-attr
/home/your-name/.tmux.conf:13: invalid option: message-fg
/home/your-name/.tmux.conf:14: invalid option: message-command-bg
/home/your-name/.tmux.conf:15: invalid option: status-attr
/home/your-name/.tmux.conf:17: invalid option: pane-border-fg
/home/your-name/.tmux.conf:18: invalid option: status-left-attr
/home/your-name/.tmux.conf:19: invalid option: window-status-fg
/home/your-name/.tmux.conf:20: invalid option: window-status-attr
/home/your-name/.tmux.conf:21: invalid option: window-status-activity-bg
/home/your-name/.tmux.conf:22: invalid option: window-status-activity-attr
/home/your-name/.tmux.conf:23: invalid option: window-status-activity-fg
/home/your-name/.tmux.conf:25: invalid option: window-status-bg

これはtmux をv2.9 系へ上げたことによっていくつかのオプションの記載方式が変わったためです。
このissue は既に挙げられています。

どのように修正すればよいか

今まで記載していたオプションを以下のように書式変更すれば良いです。

例)オプションの変更例
set -g pane-border-fg "colour236"
↓ ↓ ↓ ↓ ↓
set -g pane-border-style fg="colour236"

setw -g window-status-activity-bg "colour16"
setw -g window-status-activity-attr "underscore"
setw -g window-status-activity-fg "colour45"
↓ ↓ ↓ ↓ ↓
setw -g window-status-activity-style bg="colour16","underscore",fg="colour45"

新しく書式が変更されたオプションについては以下のものになります。

新しく書式が変更されたオプション一覧
message-command-style
message-style
mode-style
pane-active-border-style
pane-border-style
status-left-style
status-right-style
status-style
window-active-style
window-status-activity-style
window-status-bell-style
window-status-current-style
window-status-last-style
window-status-style
window-style

修正する

tbutts 氏のmigration スクリプトを使うと簡単にできます。

これをtmux-migrate-options.py というファイル名で保存して以下のようにコマンドを実行すればOK です。

$ wget https://gist.githubusercontent.com/tbutts/6abf7fb5b948c066bf180922fb37adcf/raw/198f744327a9924febdd11677f044a4ecd3f3c96/tmux-migrate-options.py
$ cp ~/.tmux.conf ~/.tmux.conf.org
$ python tmux-migrate-options.py ~/.tmux.conf.org > ~/.tmux.conf
$ diff ~/.tmux.conf.org ~/.tmux.conf
......

※.tmux.conf からsource-file でファイルを別ファイルからインポートしている場合はそのファイルに対しても実行するようにしてください。

後方互換性も持たせたい場合

後方互換性も持たせたい場合はtmux.conf のif-shell 構文を使って以下のようにtmux のバージョンによって適用するオプションを変更することができます。

tmux.conf内に書く例
# ......
run-shell "tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-)"
if-shell -b '[ "$(echo "$TMUX_VERSION < 1.9" | bc)" -eq 1 ]' \
        "setw -g window-status-activity-bg 'colour16'; \
         setw -g window-status-activity-attr 'underscore'; \
         setw -g window-status-activity-fg 'colour45'"
        "setw -g window-status-activity-style bg='colour16','underscore',fg='colour45'"
  • 2019/05/06 @ttdoda さんのコメントより、v2.9未満からfoo-{fg,bg,attr} スタイルを適用するのではなくv1.9未満から使うように修正

上記のようにすることでtmux v2.9 未満の場合は従来どおりのオプションを、v2.9 以上の場合は新しいオプション書式を適用するようになります。

以上でtmux v2.9 へのマイグレーションは完了です。
楽しいtmux v2.9 ライフを😎

参考

TsutomuNakamura
Linux 好きなプログラマです。 コミュニケーションはお気軽にしていただけると幸いです。
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした