Jawaban:
Anda dapat menulis skrip shell kecil yang meluncurkan tmux dengan program yang diperlukan. Saya memiliki yang berikut dalam skrip shell yang saya sebut dev-tmux. Lingkungan pengembang:
#!/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
Jadi setiap kali saya ingin meluncurkan lingkungan dev favorit saya, saya bisa melakukannya
$ dev-tmux
vim
ada singkatan dari perintah yang akan dieksekusi di panel jendela pertama (dan pada saat itu saja) Jika Anda ingin memberi nama sesi 'vim' maka ya, Anda benar, Anda harus menggunakan -s
benderanya. Sintaks keseluruhan: tmux new-session -d -s SessionName -n WindowName Command
Saya sedang mencoba membuat grid panel yang kompleks dan harus berurusan dengan switching dan split panel berulang-ulang. Inilah pembelajaran saya:
tmux new-session \;
Membuat Anda memulai dengan sesi baru. Untuk membaginya gunakan horizontal atau vertikal split-window -h
atau -v
selanjutnya, seperti itu:
tmux new-session \; split-window -v \; split-window -h \;
Membuat 3 panel, seperti ini:
------------
| |
|----------|
| | |
------------
Untuk menjalankan perintah di panel itu, cukup tambahkan dengan send-keys 'my-command'
perintah dan C-m
yang menjalankannya:
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \;
Dan sesi yang dihasilkan akan terlihat seperti itu.
------------
| tail |
|----------|
| | top |
------------
Sekarang saya mencoba lagi membagi-bagi panel kiri bawah, jadi beralih menggunakan kembali last-pane
, atau di windows yang lebih kompleks, dengan di select-pane -t 1
mana 1
adalah jumlah panel agar dibuat dimulai dengan 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 \;
Apakah itu. Pada dasarnya mengetahui jalan keluar Anda split-window
dan select-pane
itulah yang Anda butuhkan. Ini juga berguna untuk lulus dengan -p 75
ukuran persentase panel yang dibuat oleh split-window
untuk memiliki kontrol lebih besar atas ukuran panel.
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 \;
Yang menghasilkan sesi tampak seperti itu
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
Harapan yang membantu tmux
peminat di masa depan.
-h -p 30
membuat panel horizontal dengan 30% dari ketinggian yang tersedia; -v -p 75
sama untuk vertikal dengan lebar 75%.
\:
? Saya telah melihat skrip bekerja dengan dan tanpa ini.
\;
meneruskan tanda titik koma ke tmux, bukan bash, memungkinkan perintah untuk dikirim dengan satu panggilan ke tmux. stackoverflow.com/questions/20913198/…
Anda dapat sumber sesi yang berbeda dari .tmux.conf
seperti Anda :
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
Dan kemudian format sesi seperti yang Anda butuhkan:
#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
Ini akan membuka 2 jendela, yang kedua akan diberi nama foo / bar dan akan dibagi secara vertikal menjadi setengah (50%) dengan foo berjalan di atas bar. Fokus ada di jendela 2 (foo / bar), panel atas (foo).
Anda kemudian dapat memulai sesi tmux yang Anda sukai (dalam hal ini, session1) dengan PrefixShifts
Prefix Shift S
saya harus berada di tmux dan mencari file Anda mencoba untuk memulai sesi baru yang tmux tidak suka dan tidak akan lakukan kecuali Anda memaksanya.
Gunakan tmuxinator - memungkinkan Anda untuk mengkonfigurasi banyak sesi, dan Anda dapat memilih mana yang akan diluncurkan pada waktu tertentu. Anda dapat meluncurkan perintah di jendela atau panel tertentu dan memberikan judul ke windows. Berikut adalah contoh penggunaan dengan mengembangkan aplikasi Django .
Contoh file konfigurasi:
# ~/.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
Lihat README di tautan di atas untuk penjelasan lengkap.
lihat @ https://github.com/remiprev/teamocil
Anda dapat menentukan struktur Anda menggunakan 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
? Saya tidak dapat menemukan perintah itu di mana pun. ~ Kelihatannya seperti itu new-window
, meskipun saya tidak mengerti mengapa Anda menggunakan bentuk panjang dan pendek.
Pertama saya mendapat pendekatan dari @jasonwryan tetapi jika Anda memiliki lebih dari 2 konfigurasi, ini bisa membingungkan.
Jadi saya membuat fungsi alias:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
Dalam ~/.tmux/
saya punya beberapa sesi untuk banyak kegunaan. Misalnya saya bekerja untuk perusahaan yang berbeda yang saling memiliki lingkungan pengembang. Jadi dengan fungsi alias di atas saya cukup memanggil: tmx company1
dan memuat konfigurasi yang saya butuhkan.
Pembaruan: Tujuan dari "$ 2" setelah tmux
perintah adalah, agar Anda dapat melewati argumen tmux tambahan.
no server running on /tmp/tmux-1000/default
). Itu sebabnya saya perlu memperbaiki perintah tmux new-session
. Ref github.com/fatso83/dotfiles/commit/…
Dari skrip "get.all" saya, yang saya panggil setiap pagi untuk menjalankan banyak pekerjaan "get.XXX" berikutnya untuk menyegarkan perangkat lunak yang saya lacak. Beberapa dari mereka berhenti secara otomatis. Yang lain membutuhkan lebih banyak interaksi setelah mendapatkan selesai (seperti meminta untuk membangun 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
Jika Anda hanya ingin membagi layar menjadi 2 panel (katakan secara horizontal), Anda dapat menjalankan perintah ini (tidak diperlukan skrip tmux atau shell):
tmux new-session \; split-window -h \;
Layar Anda akan terlihat seperti ini:
[ks@localhost ~]$ │[ks@localhost ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
Dan ini adalah bagaimana saya melakukannya:
#!/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
Saya punya satu file untuk setiap proyek saya. Anda juga dapat mengelompokkan mereka untuk memiliki beberapa untuk pekerjaan beberapa untuk proyek hobi.
Anda juga dapat memindahkannya ke ~/bin
folder, menambahkannya ke PATH
dan memberi tmux_my_awesome_project
nama. Maka Anda akan dapat menjalankannya dari setiap tempat.
Coba bro , ini adalah bootstrapper proyek.
Ini memberikan apis mudah untuk berinteraksi tmux
.
Itu terlihat seperti ini:
#!/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
Untuk meluncurkan proyek, yang perlu dilakukan adalah menjalankan perintah berikut -
bro start <project_name>
Lihat screencast di bawah ini, ini menunjukkan cara memulai bro
dan menggunakan tmux
apinya.
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
Plugin tmux-continuum akan secara otomatis menyimpan sesi tmux Anda dan memuatnya saat berikutnya tmux dimulai, akan lebih mudah untuk diatur daripada beberapa solusi skrip khusus di sini.
Fitur:
- penghematan terus menerus dari lingkungan tmux
- tmux otomatis mulai ketika komputer / server dihidupkan
- pemulihan otomatis ketika tmux dimulai
Untuk menyimpan sesi Anda sesuai permintaan, Anda dapat menggunakan plugin tmux-resurrect . tmux-resurrect juga diperlukan untuk menjalankan tmux-continuum
tmux-resurrect menyimpan semua detail kecil dari lingkungan tmux Anda sehingga dapat sepenuhnya dipulihkan setelah sistem dinyalakan kembali (atau ketika Anda menginginkannya). Tidak diperlukan konfigurasi. Anda harus merasa seperti Anda tidak pernah berhenti tmux.
Ada plugin tmux untuk ini.
Lihat tmux-bangkit kembali
Kembalikan lingkungan tmux setelah sistem dinyalakan kembali.
Tmux bagus, kecuali ketika Anda harus me-restart komputer. Anda kehilangan semua program yang sedang berjalan, direktori kerja, tata letak panel dll. Ada alat manajemen yang membantu di luar sana, tetapi mereka memerlukan konfigurasi awal dan pembaruan terus-menerus ketika alur kerja Anda berkembang atau Anda memulai proyek baru.
tmux-resurrect menyimpan semua detail kecil dari lingkungan tmux Anda sehingga dapat sepenuhnya dipulihkan setelah sistem dinyalakan kembali (atau ketika Anda menginginkannya). Tidak diperlukan konfigurasi. Anda harus merasa seperti Anda tidak pernah berhenti tmux.
Atau tmux-kontinum
Fitur:
- penghematan terus menerus dari lingkungan tmux
- tmux otomatis mulai ketika komputer / server dihidupkan
- pemulihan otomatis ketika tmux dimulai
Anda dapat menggunakan kait tmux untuk menjalankan perintah saat sesi baru dibuat. Secara khusus, ini dicapai dengan menggunakan session-created
kail.
Misalnya, untuk membagi layar tiga cara dengan htop berjalan di kanan bawah Anda dapat menambahkan baris berikut ke ~/.tmux.conf
file Anda :
set-hook -g session-created 'split -h ; split -v top'
Keuntungan dari metode ini adalah Anda tidak harus menjalankan tmux dengan cara khusus (yaitu, skrip shell atau alias) untuk mendapatkan hasil yang diinginkan. Anda juga dapat menggabungkan ini dengan yang tmux new-session -A -s mysession
dijelaskan dalam jawaban lain ini sehingga perintah kait hanya dijalankan ketika Anda pertama kali membuat sesi dan bukan pada lampiran berikutnya.
Fitur ini ditambahkan oleh d15d54c2c pada tahun 2016. Rilis pertama yang menyertakannya adalah 2.4.
Anda harus menentukannya di file konfigurasi tmux Anda ( ~/.tmux.conf
), misalnya:
new mocp
neww mutt
new -d
neww
neww
(membuka satu sesi dengan 2 jendela dengan mocp diluncurkan di pertama dan mutt di kedua, dan sesi terpisah dengan 3 jendela kosong).
Saya sudah membuat skrip ini . Tidak perlu tmuxinator, ruby atau yang lainnya. Ini hanya skrip bash, dapat dikonfigurasi:
File bernama config harus berisi sesuatu seperti ini:
combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')
dan kode bash seharusnya:
#!/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
tidak memulai server sendiri. Lihat github.com/tmux/tmux/issues/182
Saya hanya mencoba menggunakan semua ide di halaman ini dan saya tidak suka ide-ide itu. Saya hanya ingin solusi yang memulai tmux dengan satu set jendela spesifik ketika terminal saya dibuka. Saya juga ingin itu menjadi idempoten, yaitu membuka jendela terminal baru mengambil alih sesi tmux dari yang sebelumnya.
Solusi di atas sering cenderung membuka beberapa sesi tmux dan saya ingin hanya satu. Pertama, saya menambahkan ini ke ~/.bash_profile
:
tmux start-server
if [[ -z "$TMUX" ]]
then
exec tmux attach -d -t default
fi
kemudian saya menambahkan yang berikut ini ke ~/.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
sekarang setiap kali saya memulai terminal atau memulai tmux atau apa pun, saya menyambungkan kembali ke pengaturan yang ada yang saya inginkan (nama sesi default
), atau membuat sesi baru dengan pengaturan itu.
tmux start_server
tidak memulai server sendiri. Lihat github.com/tmux/tmux/issues/182
bash --rcfile
untuk mendapatkan shell yang bagus di linux ilmiah dengan versi devtools khusus diaktifkan. Akan meninggalkan ini di sini jika seseorang mencoba melakukan hal yang sama.tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"