指定したウィンドウを開いた状態で起動するように tmux を設定する方法は?
22 に答える
必要なプログラムで 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
ペインの複雑なグリッドを作成しようとしていたため、ペインの切り替えと分割を何度も処理する必要がありました。ここに私の学びがあります:
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-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
将来の愛好家に役立つことを願っています。
.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
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 を参照してください。
:~$ 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
@ https://github.com/remiprev/teamocilをご覧ください
YAML を使用して構造を指定できます
windows:
- name: sample-window
splits:
- cmd: vim
- cmd:
- ipython
width: 50
- cmd:
height: 25
「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
画面を 2 つのペイン (水平方向など) に分割するだけの場合は、次のコマンドを実行できます (tmux やシェル スクリプトは必要ありません)。
tmux new-session \; split-window -h \;
画面は次のようになります。
[ks@localhost ~]$ │[ks@localhost ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
最初に@jasonwryanからのアプローチがありましたが、2つ以上の構成がある場合、混乱する可能性があります.
だから私はエイリアス関数を作成しました:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
私には~/.tmux/
、多くの用途のために複数のセッションがあります。たとえば、私はそれぞれ別の開発環境を持つさまざまな会社で働いています。したがって、上記のエイリアス関数を使用すると、次を呼び出すだけでtmx company1
済み、必要な構成をロードできます。
更新:コマンドの後の「$2」の目的tmux
は、追加の tmux 引数を渡すことができるようにすることです。
これは私にとってはうまくいきます。指定された名前で 5 つのウィンドウを作成し、home
ウィンドウを自動選択します。
new -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n ruby
selectw -t 1
tmuxpは、JSON または YAML セッション構成と Python API をサポートします。YAML 構文で新しいセッションを作成するための単純な tmuxp 構成ファイルは次のとおりです。
session_name: 2-pane-vertical
windows:
- window_name: my test window
panes:
- pwd
- pwd
プラグインtmux-continuumは、tmux セッションを自動保存し、次回 tmux が起動したときにロードします。ここにあるカスタム スクリプト ソリューションよりも簡単にセットアップできます。
特徴:
- tmux 環境の継続的な保存
- コンピューター/サーバーの電源を入れたときの自動 tmux 開始
- tmux 起動時の自動復元
セッションをオンデマンドで保存するには、tmux-resurrectプラグインを使用できます。tmux -continuumを実行するには、 tmux-resurrectも必要です。
tmux-resurrect は tmux 環境の細部をすべて保存するため、システムの再起動後 (または必要に応じて) に完全に復元できます。設定は必要ありません。tmux を決してやめないように感じるはずです。
~/.tmux.conf
tmux 構成ファイル ( ) で指定する必要があります。次に例を示します。
new mocp
neww mutt
new -d
neww
neww
(最初に mocp が起動され、2 番目に mutt が起動された 2 つのウィンドウで 1 つのセッションを開き、3 つの空のウィンドウで別の分離されたセッションを開きます)。
このスクリプトを作成しました。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
このページのすべてのアイデアを試してみましたが、どれも気に入りませんでした。ターミナルを開いたときに特定のウィンドウ セットで 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
) に再接続するか、そのセットアップで新しいセッションを作成します。