Yanıtlar:
Gerekli programlarla tmux'u başlatan küçük bir kabuk betiği yazabilirsiniz. Dev-tmux dediğim bir kabuk komut dosyasında aşağıdaki var. Geliştirme ortamı:
#!/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
En sevdiğim geliştirme ortamımı her başlatmak istediğimde
$ dev-tmux
vim
ilk (ve yalnızca o anda) bölmesinde yürütülecek komutu temsil eder. Bunun yerine oturumu 'vim' olarak adlandırmak istiyorsanız, evet, haklısınız, -s
bayrağı kullanmanız gerekiyor . Tüm sözdizimi: tmux new-session -d -s SessionName -n WindowName Command
Karmaşık bir bölme ızgarası oluşturmaya çalışıyordum ve bölmeleri tekrar tekrar değiştirmek ve bölmekle uğraşmak zorunda kaldım. İşte öğrendiklerim:
tmux new-session \;
Yeni bir oturumla başlamanızı sağlar. Yatay veya dikey olarak ayırmak için split-window -h
veya -v
daha sonra, şöyle:
tmux new-session \; split-window -v \; split-window -h \;
Bunun gibi 3 bölme oluşturur:
------------
| |
|----------|
| | |
------------
Sadece o kişileri ekleyin, bu bölmelerinde komutları çalıştırmak için send-keys 'my-command'
komuta ve C-m
bunu çalıştırır hangi:
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \;
Ve sonuçta ortaya çıkan oturum böyle görünmelidir.
------------
| tail |
|----------|
| | top |
------------
Şimdi sol alt bölmeyi tekrar alt bölümlere ayırmaya çalıştım, bu yüzden ya kullanarak last-pane
ya da daha karmaşık pencerelerde geri dönerek , oluşturuldukları sırayla bölmenin sayısı select-pane -t 1
nerede 1
olacak şekilde değiştirildi 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 \;
Bunu yapar. Temelde yolunuzu bilmek split-window
ve select-pane
ihtiyacınız olan her şey. Bölmelerin boyutu üzerinde daha fazla kontrole sahip olmak için -p 75
oluşturulmuş bölmenin yüzde boyutuyla geçmek de kullanışlıdır 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 \;
Hangi oturumun böyle görünmesine neden olur
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
Umarım tmux
gelecekte meraklılara yardımcı olur .
-h -p 30
, mevcut yüksekliğin% 30'una sahip yatay bir panel oluşturur; -v -p 75
% 75 genişliğe sahip dikey için aynı.
\:
? Senaryoların bu ve onsuz çalıştığını gördüm.
\;
noktalı virgül bash yerine tmux'a geçirilir ve komutların tmux'a bir çağrı ile gönderilmesine izin verilir. stackoverflow.com/questions/20913198/…
Sizin gibi farklı oturumlar kaynak yapabilirsiniz .tmux.conf
:
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
Ardından oturumları istediğiniz gibi biçimlendirin:
#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
Bu, ikincisi foo / bar olarak adlandırılacak ve foo çubuğun üzerinde çalışan dikey olarak ikiye bölünecek (% 50) 2 pencere açacaktır. Odak pencere 2'de (foo / bar), üst bölmede (foo) olacaktır.
Daha sonra tercih ettiğiniz tmux oturumunu (bu durumda, session1) ile başlatabilirsiniz. PrefixShifts
Prefix Shift S
tmux içinde olması gerekir ve dosya kaynak tmux sevmez ve zorlamak sürece yapmaz yeni bir oturum başlatmaya çalışır.
Tmuxinator kullanın - yapılandırılmış birden fazla oturumunuzun olmasını sağlar ve belirli bir zamanda hangisinin başlatılacağını seçebilirsiniz. Belirli pencerelerde veya bölmelerdeki komutları başlatabilir ve pencerelere başlık verebilirsiniz. İşte Django uygulamaları geliştirmek için bir örnek kullanım .
Örnek yapılandırma dosyası:
# ~/.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
Tam açıklama için yukarıdaki bağlantıdaki README'ye bakın.
bir göz at @ https://github.com/remiprev/teamocil
YAML kullanarak yapınızı belirtebilirsiniz
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
? Bu komutu hiçbir yerde bulamıyorum. ~ Görünüşe göre new-window
, hem uzun hem de kısa formu neden kullandığınızı anlayamıyorum.
İlk önce @jasonwryan yaklaşımı vardı ama daha sonra 2 yapılandırma varsa, kafa karıştırıcı alabilirsiniz.
Bu yüzden bir takma ad işlevi oluşturdum:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
In ~/.tmux/
i birçok kullanımlar için birden çok oturum var. Mesela, birbirinin geliştirici ortamına sahip farklı şirketler için çalışıyorum. Yani yukarıdaki diğer ad fonksiyonu ile ben sadece çağırabilir: tmx company1
ve i ihtiyacım yapılandırma yükleyebilirsiniz.
Güncelleme:tmux
Komuttan sonra "$ 2" nin amacı, ek tmux argümanlarını iletebilmenizdir.
no server running on /tmp/tmux-1000/default
) için zaten mevcut bir tmux oturumu olmadığında çalışmaz . Bu yüzden komutu düzeltmem gerekiyordu tmux new-session
. Ref github.com/fatso83/dotfiles/commit/…
Her sabah takip ettiğim yazılımı yenilemek için bir sonraki "get.XXX" işlerini çalıştırmaya çağırdığım "get.all" komut dosyamdan. Bazıları otomatik olarak kapanıyor. Diğerleri, alma işlemi bittikten sonra daha fazla etkileşime ihtiyaç duyar (emac oluşturmayı istemek gibi).
#!/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
Ekranı sadece 2 bölmeye bölmek istiyorsanız (yatay olarak söyleyin), bu komutu çalıştırabilirsiniz (tmux veya kabuk komut dosyaları gerekmez):
tmux new-session \; split-window -h \;
Ekranınız şöyle görünecek:
[ks@localhost ~]$ │[ks@localhost ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
Ve ben böyle yapıyorum:
#!/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
Projemin her biri için bir dosyam var. Ayrıca hobi projeleri için çalışmak için bazılarını gruplandırabilirsiniz.
Ayrıca ~/bin
klasöre taşıyabilir , ekleyebilir PATH
ve tmux_my_awesome_project
isim verebilirsiniz . Sonra her yerden çalıştırabileceksiniz.
Deneyin kardeşim , bu bir proje bootstrapper.
Etkileşimi kolay apis sağlar tmux
.
Şuna benziyor:
#!/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
Bir projeyi başlatmak için tek yapmanız gereken aşağıdaki komutu çalıştırmaktır -
bro start <project_name>
Aşağıdaki ekran görüntüsüne bakın, api'yi nasıl bro
kullanmaya tmux
başlayacağınızı ve kullanılacağını gösterir .
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
Bunun için bir tmux eklentisi var.
Check out tmux-resurrect
Sistem yeniden başlatıldıktan sonra tmux ortamını geri yükleyin.
Tmux, bilgisayarı yeniden başlatmanız dışında harika. Çalışan tüm programları, çalışma dizinlerini, bölme düzenlerini vb. Kaybedersiniz. Orada yardımcı yönetim araçları vardır, ancak iş akışınız geliştikçe veya yeni projeler başlattıklarında ilk yapılandırma ve sürekli güncellemeler gerektirirler.
tmux-resurrect, tmux ortamınızdaki tüm küçük ayrıntıları kaydeder, böylece sistem yeniden başlatıldıktan sonra (veya istediğiniz gibi) tamamen geri yüklenebilir. Hiçbir yapılandırma gerekmez. Hiç tmux'u bırakmamış gibi hissetmelisin.
Veya tmux-continuum
Özellikleri:
- tmux ortamının sürekli tasarrufu
- bilgisayar / sunucu açıldığında otomatik tmux başlatma
- tmux başlatıldığında otomatik geri yükleme
Bunu tmux yapılandırma dosyanızda ( ~/.tmux.conf
) belirtmelisiniz , örneğin:
new mocp
neww mutt
new -d
neww
neww
(bir oturumu mocp ilk olarak başlatılan ve ikincisinde muttur ile 2 pencereyle ve diğer bir oturumu 3 boş pencereyle açar).
Bu senaryoyu oluşturdum . Tmuxinator, ruby veya başkalarına ihtiyaç duymaz. Bu sadece bir bash betiği, yapılandırılabilir:
Config adlı bir dosya şöyle bir şey içermelidir:
combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')
ve bash kodu şöyle olmalıdır:
#!/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
tek başına bir sunucu başlatmıyor. Bkz. Github.com/tmux/tmux/issues/182
Eklenti tmux-continuum , tmux oturumunuzu otomatik olarak kaydedecek ve tmux'un bir sonraki başlatılışında yükleyecektir, kurulumu burada özel komut dosyası çözümlerinden bazılarından daha kolay olmalıdır.
Özellikleri:
- tmux ortamının sürekli tasarrufu
- bilgisayar / sunucu açıldığında otomatik tmux başlatma
- tmux başlatıldığında otomatik geri yükleme
Oturumunuzu istek üzerine kaydetmek için tmux-resurrect eklentisini kullanabilirsiniz. tmux -continuum'u çalıştırmak için tmux-resurrect de gereklidir
tmux-resurrect, tmux ortamınızdaki tüm küçük ayrıntıları kaydeder, böylece sistem yeniden başlatıldıktan sonra (veya istediğiniz gibi) tamamen geri yüklenebilir. Hiçbir yapılandırma gerekmez. Hiç tmux'u bırakmamış gibi hissetmelisin.
Yeni bir oturum oluşturulduğunda komutları yürütmek için tmux kancalarını kullanabilirsiniz . Özellikle, bu session-created
kanca kullanılarak elde edilir .
Örneğin, sağ altta htop çalışırken ekranı üç şekilde bölmek için ~/.tmux.conf
dosyanıza aşağıdaki satırı ekleyebilirsiniz :
set-hook -g session-created 'split -h ; split -v top'
Bu yöntemin avantajı, istenen sonucu elde etmek için tmux'u herhangi bir özel şekilde (yani kabuk komut dosyası veya diğer ad) çalıştırmanız gerekmemesidir. Ayrıca , kanca komutlarının yalnızca oturumu ilk oluşturduğunuzda ve sonraki eklerde çalıştırılmaması için bu diğer yanıttatmux new-session -A -s mysession
açıklananla birleştirebilirsiniz .
Bu özellik 2016 yılında d15d54c2c tarafından eklendi. Eklenen ilk sürüm 2.4'tür .
Bu sayfadaki tüm fikirleri kullanmayı denedim ve hiçbirini beğenmedim. Terminalim açıldığında sadece tmux'u belirli bir pencere seti ile başlatan bir çözüm istedim. Ayrıca idempotent olmasını istedim, yani yeni bir terminal penceresi açmak bir öncekinden tmux oturumunu ele geçiriyor.
Yukarıdaki çözümler genellikle birden fazla tmux oturumu açma eğilimindedir ve sadece bir tane istiyorum. İlk olarak, bunu ekledim ~/.bash_profile
:
tmux start-server
if [[ -z "$TMUX" ]]
then
exec tmux attach -d -t default
fi
daha sonra aşağıdakileri ekledim ~/.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
şimdi bir terminal başlattığımda ya da tmux'u ya da her neyse başlattığımda, mevcut istenen kurulumuma (oturum adı verilen default
) yeniden bağlarım ya da bu kurulumla yeni bir oturum oluşturuyorum.
tmux start_server
kendi başına bir sunucu başlatmaz. Bkz. Github.com/tmux/tmux/issues/182
bash --rcfile
Belirli bir devtools sürümü etkin bilimsel linux üzerinde güzel bir kabuk elde etmek için birlikte çalışmak için bu bazı kaçış yapmak zorunda kaldı . Birisi aynısını yapmaya çalışırsa bunu burada bırakacaktır.tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"