web-dev-qa-db-ja.com

指定されたウィンドウを開いた状態で起動するようにtmuxを設定する方法は?

指定されたウィンドウを開いた状態で起動するようにtmuxを設定する方法は?

224
satoru

必要なプログラムでtmuxを起動する小さなシェルスクリプトを作成できます。 dev-tmuxと呼ばれるシェルスクリプトに次のものがあります。開発環境:

#!/bin/sh
tmux new-session -d 'vim'
tmux split-window -v 'ipython'
tmux split-window -h
tmux new-window 'mutt'
tmux -2 attach-session -d

だから、お気に入りの開発環境を立ち上げたいときはいつでも

$ dev-tmux
208
Amjith

ペインの複雑なグリッドを作成しようとしており、ペインの切り替えと分割を何度も処理する必要がありました。私の学びは次のとおりです。

tmux new-session \;

新しいセッションを開始できます。水平または垂直に分割するには、次のようにsplit-window -hまたは-vを使用します。

tmux new-session \; split-window -v \; split-window -h \;

次のような3つのペインを作成します。

------------
|          |
|----------|
|    |     |
------------

そのペインでコマンドを実行するには、send-keys 'my-command'コマンドとそれを実行するC-mを追加するだけです。

tmux new-session \; \
  send-keys 'tail -f /var/log/monitor.log' C-m \; \
  split-window -v \; \
  split-window -h \; \
  send-keys 'top' C-m \; 

そして、結果のセッションはそのように見えるはずです。

------------
|  tail    |
|----------|
|    | top |
------------

ここで、左下のペインを再度分割し、last-paneを使用するか、より複雑なウィンドウでselect-pane -t 1を使用して切り替えます。ここで、1は、0で始まる順序で作成されたペインの番号です.

tmux new-session \; \
  send-keys 'tail -f /var/log/monitor.log' C-m \; \
  split-window -v \; \
  split-window -h \; \
  send-keys 'top' C-m \; \
  select-pane -t 1 \; \
  split-window -v \; \
  send-keys 'weechat' C-m \;

そうですか。基本的にsplit-windowselect-paneを使って自分のやり方を知ることが必要です。また、-p 75で作成したペインのパーセンテージサイズをsplit-windowで渡すと、ペインのサイズをより細かく制御できます。

tmux new-session \; \
  send-keys 'tail -f /var/log/monitor.log' C-m \; \
  split-window -v -p 75 \; \
  split-window -h -p 30 \; \
  send-keys 'top' C-m \; \
  select-pane -t 1 \; \
  split-window -v \; \
  send-keys 'weechat' C-m \;

その結果、セッションは次のようになります

------------------
|      tail      |
|----------------|
|          | top |
|----------|     |
| weechat  |     |
------------------

将来的にtmux愛好家の役に立つことを願っています。

112
soc1c

次のように.tmux.confから異なるセッションを取得できます。

# initialize sessions
bind S source-file ~/.tmux/session1 
bind s source-file ~/.tmux/session2

そして、必要に応じてセッションをフォーマットします。

#session1
new  -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1 
selectp -t 0

これにより2つのウィンドウが開き、2番目のウィンドウの名前はfoo/barになり、垂直に半分(50%)に分割されます。フォーカスはウィンドウ2(foo/bar)、上部ペイン(foo)にあります。

その後、次のコマンドで好みのtmuxセッション(この場合はsession1)を開始できます。 PrefixShifts

87
jasonwryan

tmuxinator を使用すると、複数のセッションを構成でき、いつでも起動するセッションを選択できます。特定のウィンドウまたはペインでコマンドを起動し、ウィンドウにタイトルを付けることができます。 Djangoアプリケーションの開発での使用例 です。

サンプル構成ファイル:

# ~/.tmuxinator/project_name.yml
# you can make as many tabs as you wish...

project_name: Tmuxinator
project_root: ~/code/Rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@Rails_project
pre: Sudo /etc/rc.d/mysqld start
tabs:
  - editor:
      layout: main-vertical
      panes:
        - vim
        - #empty, will just run plain bash
        - top
  - Shell: git pull
  - database: Rails db
  - server: Rails s
  - logs: tail -f logs/development.log
  - console: Rails c
  - capistrano:
  - server: ssh me@myhost

完全な説明については、上記のリンクのREADMEを参照してください。

48
Hamish Downer

@ https://github.com/remiprev/teamocil を見てください

yAMLを使用して構造を指定できます

windows:
  - name: sample-window
    splits:
      - cmd: vim
      - cmd:
        - ipython
        width: 50
      - cmd:
        height: 25
16
locojay
:~$ tmux new-session "tmux source-file ~/session1"  

セッション1

neww
split-window -v 'ipython'  
split-window -h  
new-window 'mutt'  

.bashrcにエイリアスを作成します

:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc  
:~$ . ~/.bashrc  
:~$ tmux_s1  
15
m_majeres

最初に @ jasonwryan からアプローチしましたが、2つ以上の構成がある場合、混乱する可能性があります。

だから私はエイリアス関数を作成しました:

tmx () {
    tmux "$2" source-file "$HOME/.tmux/$1.conf";
}

~/.tmux/には、多くの用途で複数のセッションがあります。たとえば、私は開発環境がそれぞれ異なる複数の会社で働いています。上記のエイリアス関数を使用すると、単にtmx company1を呼び出して、必要な設定をロードできます。

更新:tmuxコマンドの後の「$ 2」の目的は、追加のtmux引数を渡すことができることです。

10
danbruegge

毎朝起動する「get.all」スクリプトから、一連の後続の「get.XXX」ジョブを実行して、追跡するソフトウェアを更新します。それらのいくつかは自動終了します。他のユーザーは、getが終了すると、より多くの対話を必要とします(emacsのビルドを要求するなど)。

#!/bin/sh
tmux att -t get ||
tmux \
  new -s get -n capp \; \
  send-keys 'get.capp' C-m \; \
  neww -n emacs \; \
  send-keys 'get.emacs' C-m \; \
  neww -n git \; \
  send-keys 'get.git' C-m \; \
  neww -n mini \; \
  send-keys 'get.mini' C-m \; \
  neww -n port \; \
  send-keys 'get.port' C-m \; \
  neww -n rakudo \; \
  send-keys 'get.rakudo' C-m \; \
  neww -n neil \; \
  send-keys 'get.neil && get.neil2 && exit' C-m \; \
  neww -n red \; \
  send-keys 'get.red && exit' C-m \; \
  neww -n cpan \; \
  send-keys 'get.cpan && exit' C-m \; \
  selectw -t emacs
9
Randal Schwartz

画面を2つのペインに分割する場合(水平方向など)、次のコマンドを実行できます(tmuxやシェルスクリプトは不要です)。

tmux new-session \; split-window -h \;

画面は次のようになります。

[ks@localhost ~]$                      │[ks@localhost ~]$ 
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
[10] 0:ks@localhost:~*                  "localhost.localdomain" 19:51 31-янв-16
8
ks1322

そして、これは私がそれを行う方法です:

#!/bin/bash

function has-session {
  tmux has-session -t name_of_my_session 2>/dev/null
}

if has-session ; then
  echo "Session already exists"
else
  cd /path/to/my/project
  tmux new-session -d -s name_of_my_session 'vim'
  tmux split-window -h -p 40 start_web_server
  tmux split-window -v
  tmux attach-session -d -t name_of_my_session
fi

プロジェクトごとに1つのファイルがあります。また、それらをグループ化して、仕事用に趣味のプロジェクト用にいくつか持つことができます。

また、~/binフォルダーに移動し、PATHに追加して、tmux_my_awesome_projectの名前を付けることもできます。その後、各場所から実行できるようになります。

4
Artur Małecki

これは私のために動作します。指定された名前で5つのウィンドウを作成し、homeウィンドウを自動選択します。

new  -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n Ruby
selectw -t 1
4
cevaris

プラグイン tmux-continuum は、tmuxセッションを自動的に保存し、次回tmuxが起動したときにロードします。ここでのカスタムスクリプトソリューションよりもセットアップが簡単です。

特徴:

  • tmux環境の継続的な保存
  • コンピュータ/サーバーがオンになっているときの自動tmux開始
  • tmuxの起動時の自動復元

セッションをオンデマンドで保存するには、 tmux-resurrect プラグインを使用できます。 tmux-resurrect も実行する必要があります tmux-continuum

tmux-resurrectは、tmux環境の小さな詳細をすべて保存するため、システムの再起動後(または気分がよいときに)完全に復元できます。設定は不要です。 tmuxを決してやめないように感じるはずです。

1
Padhraic

tmuxp JSONまたはYAMLセッション構成とPython APIをサポートします。 YAML構文で新しいセッションを作成する簡単なtmuxp構成ファイルは次のとおりです。

session_name: 2-pane-vertical
windows:
  - window_name: my test window
    panes:
      - pwd
      - pwd
1

bro を試してください。これはプロジェクトブートストラップです。

tmuxと対話するための簡単なAPIを提供します。

次のようになります。

#!/bin/sh
# @ project_name/tasks/init.sh
structure project_name
  window editor
    run 'vim'
  window terminal
    run 'echo happy coding ...'
focus editor
connect project_name

プロジェクトを起動するには、次のコマンドを実行するだけです-

bro start <project_name>

1
Asur

Tmux構成ファイル(~/.tmux.conf)で指定する必要があります。次に例を示します。

new mocp
neww mutt

new -d
neww
neww

(最初にmocpを起動し、2番目にmuttを使用して2つのウィンドウで1つのセッションを開き、3つの空のウィンドウで別のセッションを開きます)。

1
Victor Deryagin

このスクリプト を作成しました。 tmuxinator、Rubyなどは必要ありません。構成可能なbashスクリプトです。

Configという名前のファイルには、次のようなものが含まれている必要があります。

combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')

bashコードは次のようになります。

#!/bin/bash

if [ -r config ]; then
    echo ""
    echo "Loading custom file"
    . config
else
    . config.dist
fi

tmux start-server

window=0
windownumber=-1

for i in "${combo[@]}"; do

    if [ $((window%2)) == 0 ]; then
        name=${i}
        ((windownumber++))
    else
        command=${i}
    fi

    if [ ${combo[0]} == "${i}" ]; then
        tmux new-session -d -s StarTmux -n "${name}"
    else
        if [ $((window%2)) == 0 ]; then
            tmux new-window -tStarTmux:$windownumber -n "${name}"
        fi
    fi

    if [ $((window%2)) == 1 ]; then
        tmux send-keys -tStarTmux:$windownumber "${command}" C-m
    fi

    ((window++))
done

tmux select-window -tStarTmux:0
tmux attach-session -d -tStarTmux
1
sensorario

これにはtmuxプラグインがあります。

チェックアウト tmux-resurrect

システムの再起動後にtmux環境を復元します。

コンピューターを再起動する必要がある場合を除き、Tmuxは優れています。実行中のプログラム、作業ディレクトリ、ペインレイアウトなどはすべて失われます。便利な管理ツールはありますが、ワークフローの進化や新しいプロジェクトの開始に合わせて、初期構成と継続的な更新が必要です。

tmux-resurrectは、tmux環境の小さな詳細をすべて保存するため、システムの再起動後(または気分がよいときに)完全に復元できます。設定は不要です。 tmuxを決してやめないように感じるはずです。

または tmux-continuum

特徴:

  • tmux環境の継続的な保存
  • コンピュータ/サーバーがオンになっているときの自動tmux開始
  • tmuxの起動時の自動復元
1
Syakur Rahman

tmux hooks を使用して、新しいセッションが作成されたときにコマンドを実行できます。具体的には、これはsession-createdフックを使用して実現されます。

たとえば、htopを右下で実行して3つの方法で画面を分割するには、~/.tmux.confファイルに次の行を追加します。

set-hook -g session-created 'split -h ; split -v top'

この方法の利点は、目的の結果を得るために特別な方法(シェルスクリプトまたはエイリアス)でtmuxを実行する必要がないことです。これを この他の回答 で説明されているtmux new-session -A -s mysessionと組み合わせて、最初のセッションを作成したときにのみフックコマンドが実行され、後続の添付ファイルでは実行されないようにすることもできます。

この機能は、2016年に d15d54c2c によって追加されました。これを含める最初のリリースは2.4です。

0
kevmitch

このページのすべてのアイデアを使用してみましたが、どれも好きではありませんでした。端末を開いたときに特定のウィンドウセットでtmuxを起動するソリューションが必要でした。また、it等であることを望んでいました。つまり、新しいターミナルウィンドウを開くと、前のセッションからtmuxセッションが引き継がれます。

上記のソリューションは、多くの場合、複数のtmuxセッションを開く傾向があり、1つだけが必要です。まず、これを~/.bash_profileに追加しました。

tmux start-server
if [[ -z "$TMUX" ]]
then
  exec tmux attach -d -t default
fi

その後、次のコードを~/.tmux.confに追加しました。

new -s default -n emacs /usr/local/bin/emacs
neww -n Shell /usr/local/bin/bash
neww -n Shell /usr/local/bin/bash
selectw -t 1

ターミナルを起動するか、tmuxなどを起動するたびに、既存の目的のセットアップ(defaultという名前のセッション)に再接続するか、そのセットアップで新しいセッションを作成します。

0
Phil Hollenback