Edited at

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


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 ライフを😎


参考