回答:
必要なプログラムで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
vim
は、ウィンドウの最初の(その時点でのみ)ペインで実行されるコマンドを表します。代わりにセッションに「vim」という名前を付けたい場合は、はい、そうです、-s
フラグを使用する必要があります。構文全体: tmux new-session -d -s SessionName -n WindowName Command
私はペインの複雑なグリッドを作成しようとしており、ペインの切り替えと分割を何度も何度も処理する必要がありました。ここに私の学習があります:
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
where 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
、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
将来の愛好家に役立つことを願っています。
-h -p 30
は、使用可能な高さの30%の水平パネルを作成します。-v -p 75
幅75%の縦型も同じです。
\:
ですか?私は、スクリプトがこれを使用してもしなくても動作することを確認しました。
\;
セミコロンをbashではなくtmuxに渡し、コマンドをtmuxへの1回の呼び出しで送信できるようにします。stackoverflow.com/questions/20913198/...
あなたはあなたの.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という名前になり、fooがbarの上で実行されるように垂直方向に半分(50%)に分割されます。フォーカスはウィンドウ2(foo / bar)、上部ペイン(foo)にあります。
次に、次のコマンドを使用して、好みのtmuxセッション(この場合は、session1)を開始できます。 PrefixShifts
Prefix Shift S
ことを意味します。tmuxにいる必要があり、ファイルを調達すると、強制的に実行しない限り、tmuxが好まない新しいセッションを開始しようとします。
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を参照してください。
@ https://github.com/remiprev/teamocilをご覧ください
YAMLを使用して構造を指定できます
windows:
- name: sample-window
splits:
- cmd: vim
- cmd:
- ipython
width: 50
- cmd:
height: 25
:~$ tmux new-session "tmux source-file ~/session1"
neww
split-window -v 'ipython'
split-window -h
new-window 'mutt'
:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc
:~$ . ~/.bashrc
:~$ tmux_s1
neww
ですか?そのコマンドはどこにも見つかりません。〜と思われますがnew-window
、長い形式と短い形式の両方を使用する理由を理解できません。
まず、@ jasonwryanからアプローチしましたが、2つ以上のがある場合、混乱する可能性があります。
だから私はエイリアス関数を作成しました:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
で~/.tmux/
私は多くの用途のために複数のセッションを持っています。たとえば、私はお互いに開発環境を持っているさまざまな会社で働いています。したがって、上記のエイリアス関数を使用すると、次のように呼び出すだけで済みtmx company1
、必要な構成をロードできます。
更新:tmux
コマンドの後の「$ 2」の目的は、追加のtmux引数を渡すことができるようにすることです。
no server running on /tmp/tmux-1000/default
)にフックする既存のtmuxセッションがまだない場合、関数は実際には機能しません。そのため、コマンドをでパッチする必要がありましたtmux new-session
。参考github.com/fatso83/dotfiles/commit/...
毎朝呼び出す「get.all」スクリプトから、一連の「get.XXX」ジョブを実行して、追跡するソフトウェアを更新します。それらのいくつかは自動終了します。getacが終了すると(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
そして、これは私がそれをする方法です:
#!/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
名前を。その後、各場所から実行できます。
仲間を試す。これはプロジェクトのブートストラップです。
対話するための簡単なAPIを提供します tmux
ます。
それはこのようなものです:
#!/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>
以下のスクリーンキャストを確認してください。APIのbro
使用方法と使用方法が示されていますtmux
。
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
プラグインtmux-continuumはtmuxセッションを自動的に保存し、次にtmuxが起動したときにそれをロードします。ここにあるカスタムスクリプトソリューションよりも簡単にセットアップできます。
特徴:
- tmux環境の継続的な保存
- コンピュータ/サーバーの電源が入ったときにtmuxが自動的に起動する
- tmuxの起動時に自動復元
セッションをオンデマンドで保存するには、tmux-resurrectプラグインを使用できます。tmux- continuumを実行するには、tmux-resurrectも必要です
tmux-resurrectはtmux環境の細かい詳細をすべて保存するため、システムの再起動後(または希望するときに)完全に復元できます。設定は必要ありません。tmuxを終了しないように感じる必要があります。
これにはtmuxプラグインがあります。
tmux-resurrectをチェックしてください
システムの再起動後にtmux環境を復元します。
Tmuxは、コンピュータを再起動する必要がある場合を除き、優れています。実行中のすべてのプログラム、作業ディレクトリ、ペインレイアウトなどが失われます。便利な管理ツールはそこにありますが、ワークフローの発展や新しいプロジェクトの開始に合わせて、初期構成と継続的な更新が必要です。
tmux-resurrectはtmux環境の細かい詳細をすべて保存するため、システムの再起動後(または希望するときに)完全に復元できます。設定は必要ありません。tmuxを終了しないように感じる必要があります。
特徴:
- tmux環境の継続的な保存
- コンピュータ/サーバーの電源が入ったときにtmuxが自動的に起動する
- tmuxの起動時に自動復元
tmuxフックを使用して、新しいセッションが作成されたときにコマンドを実行できます。具体的には、これはsession-created
フックを使用して実現されます。
たとえば、画面右下でhtopが実行されている3つの方法で画面を分割するには、次の行を~/.tmux.conf
ファイルに追加します。
set-hook -g session-created 'split -h ; split -v top'
この方法の利点は、望ましい結果を得るために特別な方法(つまり、シェルスクリプトやエイリアス)でtmuxを実行する必要がないことです。これをこの他の回答でtmux new-session -A -s mysession
説明されているものと組み合わせることもできますて、フックコマンドが最初にセッションを作成するときにのみ実行され、後続の添付ファイルでは実行されないようにすることもできます。
tmux構成ファイル(~/.tmux.conf
)で指定する必要があります。次に例を示します。
new mocp
neww mutt
new -d
neww
neww
(2つのウィンドウで1つのセッションを開き、最初にmocpを起動し、2番目にmuttを起動し、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 start_server
それ自体でサーバーを起動しません。github.com/tmux/tmux/issues/182を
このページのすべてのアイデアを試してみたところ、どれも気に入らなかった。端末が開いたときに特定のウィンドウセットで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
)に再接続するか、そのセットアップで新しいセッションを作成します。
tmux start_server
それ自体でサーバーを起動しません。github.com/tmux/tmux/issues/182を
bash --rcfile
特定のdevtoolsバージョンを有効にした科学的なLinuxで素晴らしいシェルを取得するためにこれを組み合わせて動作させるには、恐ろしいエスケープをいくつか実行する必要がありました。誰かが同じことをしようとした場合、これをここに残します。tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"