2015-04-25
今更 screen に入門してみた
プロローグ
screen/tmux を長いこと使っていなかった。
- 使ってみようと思ってネットの記事とか調べ始める
- 分割とか別にわりとどうでもよくね?と思う
- とりあえず、screen を入れる
- Ctrl-a を封印されて死ぬ(emacs ユーザなので)
- もう二度と使うか!と思ってアンインストール
みたいなループを2年毎に繰り返していた。
僕はおじさんなので、端末は基本的に 80x24 でないと気持ち悪いし、だから分割とかしない。 (emacs はホスト側のやつ最大化して使うけど、こっちも分割使ってないので、分割のメリットが全くわからない。 何か見ながら作業する場合はふつうにバッファ切り替えればいいでしょ?くらいに思っている)
今回、某所で話していたら、「便利な nohup くらいでしか使ってない」みたいな話を聞いて、「逆にそれくらいならいいかも、いけるかも」と思って、 最終的に screen 導入に至ったので、その経緯なんかを書いてみようと思う。
インストール
会社の Linux 開発機に screen が入ってた(tmuxは入ってなかった)ので、とりあえずそれを使ってみることにする。 mac はパッケージ(homebrew)で入れた(気がする。最初から入ってたかも)。
プレフィックスキーについて悩む
デフォルトのプレフィックスキーが Ctrl-a なのがまじで理解できない。これに決めたやつは死んだほうがいいとマジで思う。たくさんの emacs 使いを 惑わせた罪は重い。(ってのは言い過ぎにしても、emacs ユーザじゃなくても、bash とか使ってる人はふつう Ctrl-a 使うでしょ?まじ意味がわからない)
で、キーバインド変えようと思うのだけど、この設定方法がマジで意味がわからない。Ctrl-s とか使わないから、振ろうかとおもったら、うまくいかないし
(シェルだか端末だかが先に横取りしちゃうのかもな。そっち直せばいけるのかも)、「Ctrl-; とか、いいんじゃね?」と思ったのだけど、どうやって .screenrc
書くと
設定できるのかマジでわからない(^;^;
だとうまくいかなかった)
ぐぐると、Ctrl-z と Ctrl-t の事例ばかりひっかかり、マニュアルを見ても、いまいち設定の方法がわからない。
そのへんの試行錯誤
2年ぶりくらいにscreen再挑戦してみてるんだけど、みんなescape ctrl-zとかctrl-t とかにしてて、そのキー使ってないの?まじで?と思う今日この頃(デフォルトのctrl-aは論外として)
— tsucchi (@tsucchi) 2015, 4月 17
ctrl-s が間違って押すとはまるし、正しい用途で使ったこと無いから一番いいんだけど、これ使えないっぽいし。。。
— tsucchi (@tsucchi) 2015, 4月 17
screenあればバックグランドの用途減る(だろう)から、ctrl-zでもいいのかな...でも結構使うんだよな、ctrl-z...
— tsucchi (@tsucchi) 2015, 4月 17
ctrl-r 使ってないから、これにするべ、と思ったら、このキーめっちゃ便利やんけ!知らなかった。
— tsucchi (@tsucchi) 2015, 4月 17
Ctrl-r 使わないし、そこそこ押しやすそうだから、使おうかと思ったら、今まで使っていないだけで、ふつうに便利機能だった。勉強になった。
これ知らなかった... / “bashの履歴を検索するコマンドが捗りすぎてヤバい!俺の作業効率が2倍どころか更に倍してドンッ! - でーじてとこん” http://t.co/4IYfcFRq8c #bash
— tsucchi (@tsucchi) 2015, 4月 17
最終的に Ctrl-u
にした。bash の文字削除は Ctrl-d/Ctrl-k/Ctrl-h くらいしか使わないので、潰してもいいや、と思った。vi の操作にも影響なさそうだし。
シェルの設定をする
とりあえず、プロンプトに、ウインドウの番号をいれるか、と思って、こんな感じの bash 関数を定義した。
__screen_window ()
{
if [ -n "$WINDOW" ] ; then
printf "$WINDOW:"
else
printf ""
fi
}
で、PS1
に $(__screen_window)
みたいにして呼び出せば良い。詳細は以前書いた。
今のプロンプトはこんな感じになっている。
ウインドウ名が bash
なのがイマイチだと思って、いろいろ調べると、カレントディレクトリにするのが定番っぽいので、その設定を入れる。
# screen の場合のみ。ウィンドウ名をカレントディレクトリにする
if [ $TERM == 'screen' ]; then
PS1=${PS1}'\[\033k\W\033\\\]'
fi
ホイールマウスの挙動がおかしくて悩む
ホイールでは端末がスクロールして欲しいのに、screen を有効にすると、ヒストリをなぜかたどるようになる(矢印の上キーと同じ動作になるっぽい?)。
これはめっちゃ使いにくい、というか、挙動を勝手に変えるなクソが、と思うので元の挙動と同じになるようにする。
使っている機能
基本的には新しいウィンドウを作るのと、そのウインドウへの移動、ウインドウの名称変更(リモートサーバに繋いだ時とか、reply 起動した時とか)くらいしか使っていない。 全然たいしたことやってないけど、これだけでも十分便利だった。
使ってみて
- 普通にタブとして便利だった。
- 端末のタブを使わなくなってしまったので、Ctrl-t に割り当てもアリなのかも
- リモートサーバにつなぐときのベストプラクティスがまだよくわからん
- 回線切断とか考えると、リモート側でも screen 起動しておく方がいいのかな
- ローカル側はあくまでもただのタブ、みたいな感じ
- detach するのはいいのか悪いのか今の所わからない
- 幸か不幸か、回線切断を食らっていないため
- どうせ attach し直しとか無理でしょ?という意見もあるけど、どうなんだろ?
と、いうわけで、設定はまだまだ見直しが必要だし、もう少し使い方も覚えていかなくてはダメだけど、 とりあえず軌道に乗った感じなので、ゆるゆると使っていこうかなぁ、と思っている次第。
追記
#bookmark 今更 screen に入門してみた - tsucchi の日記 2nd season http://t.co/blwD92FusE Ctrl-Z でも結構不自由ないですよ。サスペンドしたいときは連打すればいいので。
— OGATA Tetsuji (@xtetsuji_) 2015, 4月 25
なるほどー。Ctrl-z 2連打すれば通常の Ctrl-z と同じ動作になるわけだから、それを使えば良い、と。Ctrl-z の使用頻度を考えるとそれはそれでアリなのかもしれないです。