kmkのメモ帳

気が向いたときにLinuxだったり、プログラミングだったり、適当なメモを書いてます。

Blogは移転しました。

自動的にリダイレクトします。

ぼくのかんがえた(各種ネットから設定を拝借した)さいきょうの.tmux.conf

f:id:Q068891:20200508214214p:plain

はじめに

えんじにあなので今まで色々なターミナルソフトを渡り歩きました。 その度に細かいソフト固有の使い方を覚えるのがめんどくさいなと思って生きてきました。

tmuxは元々はログインしたサーバから接続が切れても良いようにという目的で使い始めました。使用してみるとターミナルソフト側でやってたことが(ターミナル内の文字列検索、画面分割機能など)tmux上でもできてかなり便利なことを実感したのでサーバ関係なくローカルでの作業時もtmux上で作業するようになりました。 そこから1年ちょっと使い「ターミナルソフトは反応が遅く無くてある程度安定していたらまぁなんでもいいかな」程度にはtmuxとずぶずぶの関係になりました。

自分のメモという意味も込めて、本家のマニュアルだったり各種WEBサイトさまからパクったを参考にさせていただき1年こつこつ作った.tmux.confを晒します。(ネットに散らばっている情報をまとめるのも良いことかなと考えて晒しました。)

.tmux.confの説明

基本的に説明はコメントに書いてありますのでそこを読んでください。

なお、私はSessionとPaneのみ使用してWindow機能は全く使わないので、Window周りの設定は皆無です。 (SessionとWindow併せて使ってると混乱しないですか。。?)

外観はあまり変えていません。ステータスバーの文字や色を少し変えたりとか程度です。

お気に入りの設定は[Shift+上キー/下キー]でセッション間移動と、[Shift+左/右キー]でパネル移動の部分です。 prefixを入力しなくて良いのでこれだけで操作が快適になります。

なお、tmuxはMacOSのiTerm2で使用していてバージョンはtmux 3.1bです。

.tmux.conf

gist26c63a975f8fe99dab96e266653f8ec2

ターミナルログイン時に自動でtmux起動

上記.tmux.confに合わせて、.zshrcに下記を追加してターミナルにログインしたときに自動でtmuxに入るようにしています。 下記サイトさまのものを少しだけ変えて使用してます(大感謝)。

qiita.com

デタッチされた既存のセッションがある場合はそこに自動でアタッチして、既存のデタッチされたセッションが無い場合は新規セッションを作成しています。(こういうことしておかないと忘れ去られたセッションがどんどん溜まっていく。。。)

基本的に上記サイト様を参考にして欲しいですが、自動アタッチするように少しだけ変更したので迷いましたが晒しておきます。ほぼそのままです。

.zshrc

.zshrcに下記を追記

function is_exists() { type "$1" >/dev/null 2>&1; return $?; }
function is_osx() { [[ $OSTYPE == darwin* ]]; }
function is_tmux_running() { [ ! -z "$TMUX" ]; }
function shell_has_started_interactively() { [ ! -z "$PS1" ]; }
function is_ssh_running() { [ ! -z "$SSH_CONECTION" ]; }

function tmux_automatically_attach_session()
{
    if is_tmux_running; then
        ! is_exists 'tmux' && return 1
    else
        if shell_has_started_interactively && ! is_ssh_running; then
            if ! is_exists 'tmux'; then
                echo 'Error: tmux command not found' 2>&1
                return 1
            fi

            if tmux has-session >/dev/null 2>&1 && tmux list-sessions | grep -v attached | grep -qE create; then
                # detached session exists
                # auto attach
                tmux attach-session
            fi

            if is_osx && is_exists 'reattach-to-user-namespace'; then
                # on OS X force tmux's default command
                # to spawn a shell in the user's namespace
                tmux_config=$(cat $HOME/.tmux.conf <(echo 'set-option -g default-command "reattach-to-user-namespace -l $SHELL"'))
                tmux -f <(echo "$tmux_config") new-session && echo "$(tmux -V) created new session supported OS X"
            else
                tmux new-session
            fi
        fi
    fi
}
tmux_automatically_attach_session

参考サイトさま一覧

qiita.com

qiita.com

unix.stackexchange.com

# # #