358

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

4

22 に答える 22

336

必要なプログラムで 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
于 2011-04-22T06:35:21.590 に答える
276

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

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 11始まるペインの番号を順番に作成しました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-window基本的に、必要なのはandの使い方を知っているselect-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将来の愛好家に役立つことを願っています。

于 2016-10-12T21:56:02.867 に答える
110

.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%)に分割され、fooがbarの上で実行されます。フォーカスはウィンドウ2(foo / bar)、トップペイン(foo)にあります。

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

于 2011-04-22T07:00:55.247 に答える
60

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 を参照してください。

于 2012-04-18T19:22:35.563 に答える
21
:~$ 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  
于 2014-01-09T23:26:15.670 に答える
17

@ https://github.com/remiprev/teamocilをご覧ください

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

windows:
  - name: sample-window
    splits:
      - cmd: vim
      - cmd:
        - ipython
        width: 50
      - cmd:
        height: 25
于 2011-05-25T02:01:36.030 に答える
11

「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
于 2011-07-05T22:48:55.663 に答える
11

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

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

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

[ks@localhost ~]$                      │[ks@localhost ~]$ 
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
[10] 0:ks@localhost:~*                  "localhost.localdomain" 19:51 31-янв-16
于 2016-01-31T16:52:40.103 に答える
11

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

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

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

私には~/.tmux/、多くの用途のために複数のセッションがあります。たとえば、私はそれぞれ別の開発環境を持つさまざまな会社で働いています。したがって、上記のエイリアス関数を使用すると、次を呼び出すだけでtmx company1済み、必要な構成をロードできます。

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

于 2016-10-19T07:56:58.783 に答える
4

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

new  -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n ruby
selectw -t 1
于 2014-11-18T17:18:11.660 に答える
2

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

session_name: 2-pane-vertical
windows:
  - window_name: my test window
    panes:
      - pwd
      - pwd
于 2015-12-29T17:55:52.173 に答える
2

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

特徴:

  • tmux 環境の継続的な保存
  • コンピューター/サーバーの電源を入れたときの自動 tmux 開始
  • tmux 起動時の自動復元

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

tmux-resurrect は tmux 環境の細部をすべて保存するため、システムの再起動後 (または必要に応じて) に完全に復元できます。設定は必要ありません。tmux を決してやめないように感じるはずです。

于 2017-04-17T06:44:54.550 に答える
1

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

new mocp
neww mutt

new -d
neww
neww

(最初に mocp が起動され、2 番目に mutt が起動された 2 つのウィンドウで 1 つのセッションを開き、3 つの空のウィンドウで別の分離されたセッションを開きます)。

于 2011-04-10T03:39:29.447 に答える
1

このスクリプトを作成しました。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
于 2015-04-16T21:59:01.477 に答える
1

このページのすべてのアイデアを試してみましたが、どれも気に入りませんでした。ターミナルを開いたときに特定のウィンドウ セットで tmux を開始するソリューションが欲しかっただけです。また、べき等であることも望んでいました。つまり、新しいターミナル ウィンドウを開くと、前のウィンドウから tmux セッションが引き継がれます。

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

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

次に、次を my に追加しました~/.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) に再接続するか、そのセットアップで新しいセッションを作成します。

于 2015-06-24T18:03:33.043 に答える