screenからtmuxに乗り換えたら快適!(二点除く)
ずっとscreen使ってたけど、
時代はGNU screenからtmuxへ - Gマイナー志向
のタイトルにやられて変えてみた。
個人的screenの利点
- ネットワーク切っても別のクライアントからでも同じ状態から再開できる。
- ネットワーク切ってもプロセス止まらない。nohup要らず。
基本同じことだけどもこれがとても素晴しい。
ということでちゃんとこれができるか確認すると、あっさりできた。
screenの場合は設定が必要だったdetach操作せずにネットワークを切ったときに自動的にデタッチする(autodetach on)もデフォルトで動作。
(tmuxだとdetach-on-destroy)
.tmux.conf
.screenrcにあたるものは~/.tmux.conf
基本的な説明とかは以下リンク参照。
.tmux.confをごにょごにょする - mizchi log
以下、自分の設定
# Prefix set-option -g prefix C-q # デフォルトのPrefix(C-b)を解除 unbind C-b # View # ステータスライン更新間隔(秒) set -g status-interval 5 set -g status-left-length 100 set -g status-right-length 50 set-option -g set-titles on # www1.hoge.com→www1のみ表示。 set-option -g set-titles-string "@#(hostname | sed 's/\\\\..*//')" # ステータスラインカスタム関連 set -g status-bg black set -g status-fg white set -g status-attr dim # 左部:whoami@hostname set -g status-left '#[fg=green,bold][#20(whoami)@#H]#[default]' # 右部:[2011/03/06(Sun)20:21] set -g status-right '#[fg=green,bold][%Y/%m/%d(%a)%H:%M]#[default]' set -g message-attr bold set -g message-fg white set -g message-bg red set -g pane-active-border-fg white set -g pane-active-border-bg black set-window-option -g mode-bg white set-window-option -g mode-fg black set-window-option -g window-status-bg black set-window-option -g window-status-fg white set-window-option -g window-status-current-bg green set-window-option -g window-status-current-fg black set-window-option -g window-status-current-attr bold # Option # utf8有効 set-window-option -g utf8 on # コピー、選択モードのキーバインドvi/emacs set-window-option -g mode-keys vi # マウス有効。MacのTerminal.appでは効かず… set-option -g mouse-select-pane on # ウィンドウ等の番号基準値 set-option -g base-index 1 # KeyBindings # 直前のウィンドウ bind C-q last-window # 設定リロード bind r source-file ~/.tmux.conf # ウィンドウ選択画面 bind Space choose-window # 新ウィンドウ作成 bind c new-window # 分割していたペインそれぞれをWindowに bind b break-pane # ペインの縦分割 bind h split-window -v # ペインの横分割 bind v split-window -h # ペインリサイズ関連vi風 bind -r C-h resize-pane -L 6 bind -r C-l resize-pane -R 6 bind -r C-j resize-pane -D 6 bind -r C-k resize-pane -U 6 bind -r s swap-pane -U # ペイン終了 bind k kill-pane # ウィンドウ終了 bind K kill-window # ペイン番号表示 bind i display-panes # コピーモード突入 bind y copy-mode # ペースト bind p paste-buffer
ファイルはここGitHub - u1tnk/dotfiles
基本vi慣れした体にわかりやすそうにしてみた。
変わってるのはPrefixキーがctrl+qにしてるとこかな。
普通だとctrl+tらしいけど、screenのときに遠くて使い辛いと思ってたので変えてみた。
かぶったりして困ってはいないが、emacsの人とか困るのかな??
未解決事項
以下のページを見て設定した「ログイン時自動起動かつ、セッションがあったらアタッチ、無かったらデタッチ」にすると固まることがある。
http://meme.biology.tohoku.ac.jp/students/iwasaki/tmux
どうも複数クライアントで使ったときがダメなようで一回固まるようになるとずっとダメ。
zshrcに入れてたからログインできなくなって散々でした。
それぞれのコマンドを手で入力すると固まらないんですが、zshrcにコマンド定義するとダメでした。
固まったときにps見るとtmux ls のプロセスが複数あって全部終わらない…
screenだったら
screen -D -R
で一発なんですけどね。
tmux は
tmux attach
だと既存セッションが無いときはエラーになるので…
まあ、ほとんどは既存セッションがあるので、ほぼ変わらないのですが。
で、やっぱ.zshrcとかで自動起動するのはログインできなくなるのが怖いのでやらない方が良いですね。
ということで
alias ta="tmux attach"
で、ログインするごとに入力してる。対処はできるけど、めんどくさいので…
ちなみに前回のsshしか使えないマシンで.xxrcのせいでログインできなくなったときの対処法 - 凡人プログラマはこの現象が原因で調べました…
Macのローカルで使用するとvimでコピペできない。
yとかpのコピペだけ動きません。
以下の件かと思い
vim - copy-paste not working in MacVim when launched in tmux - Super User
以下のパッチあててみたけどダメ。
Fix tmux bootstrap · GitHub
結局デフォルトの7.2を使うようにして回避。
個人的にローカルだとMacVim-KaoriyaのGUIでほとんど済ますので、これで妥協できましたが、ローカルでもCUI版を使いまくる人だと致命的だと思います…
うーん、こいつら解決したいんだが力不足で…解決した人いたら教えてください!
まとめ
最初からウィンドウのタイトルが実行中コマンドになってたりデフォルトで結構便利になってるし、カスタマイズもscreenに比べて簡単(screen使った後で慣れてるからかもしれませんが)だったので好印象。
但し、当然ながらscreenより枯れて無いので、上記のような問題点が残ると完成度はもうちょっと無いと安心して移行できないかも。
screenを極めてるわけでは無いですが、頻繁に使う機能に絞るとscreenでできない事も見あたらないのは事実。
ということでscreenを使いこなしている人が今無理に移行する必要はありませんね、正直^^);
screen系のアプリ自体を今から使う人や新しいものじゃないとガマンできない人は使うと幸せになれるかも。