Tmux'un manuel olarak girmeden bir panel seti açmasını nasıl sağlayabilirim?


30

Bu yüzden, tmuxbelirli komutları otomatik olarak belirli bölmelerde açan projeye özgü bir oturum yapmak istiyorum . Çevrimiçi bir öğreticinin ve tmuxman sayfasının ardından , bir yapılandırma dosyası için bulduğum şey bu:

new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

Sonuç ... hiçbir şey. tmuxhiçbir komut çalıştırılmadan o pencerede tek bir pencere ve tek bir pencere ile başlar.

Önceden uygulanmış belirli komutlarla bir dizi pencere ve bölme oluşturmama izin veren bir yapılandırma dosyası oluşturmaya nasıl giderim?

Yanıtlar:


36

Konfigürasyon dosyanız çalışıyor, ancak birkaç komplikasyon var.

Kısa ömürlü komutlar

İlk olarak, başlattığınız komutlar ( ls örnekleri ) çok hızlı bir şekilde çalışmayı tamamlar. Komutların pencereleri ve bölmeleri oluşturulur, ancak her komuttan çıkar çıkmaz kaybolurlar.

Amacınız, nihai konfigürasyonunuzda böyle bir "tek atış" komutunu kullanmaksa, o zaman muhtemelen pencere seçeneğini remain-on-exit(ve oturumda set-remain-on-exitoluşturulan tüm pencerelere varsayılan bir ayar sağlamak için muhtemelen oturum seçeneğini ) kullanmalısınız. Bir remain-on-exitpencere için ayarlandığında, komut çıktığında kaybolmaz. Muhtemelen harita isteyecektir respawn-window(: not bir tuşa respawn-windoworijinal komutu respawn olacak; respawn-paneayrıca mevcuttur tmux bireysel bölmeleri respawn 1.5).

bind-key R respawn-window

# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on

# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# restore global r-o-e
set -g set-remain-on-exit off

# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit

Veya, ilk pencerenizde 0 yerine 1 numara olduğuna dikkat etmezseniz, genel değeri değiştirmekten kaçınabiliriz:

bind-key R respawn-window

# create a session with a throw-away window
new true

# for future windows, stay open after the command exits
set set-remain-on-exit on

# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls

# for future windows, revert r-o-e to global value
set -u set-remain-on-exit

Yalnızca lsbasitleştirilmiş bir yer tutucu komutu olarak kullanıyorsanız ve aslında pencerelerinizde / bölmelerinizde bir tür etkileşimli komutun ortaya çıkmasını istiyorsanız, muhtemelen sonunda çalıştırmayı düşündüğünüz komutu açmanız gerekir. Amaçlanan komut sırasında kullanmak için başlangıç için çok uzun sürerse tmux test, ardından bir kabuk ya da diğer basit etkileşimli komutu (örn yerine top, sqlite3vs.).

new-session Varsayılan Komuttur

İkincisi, tmux'u bir komut argümanı olmadan çalıştırmak (örn. tmux) new-sessionKomutu kullanmaya eşdeğerdir (yani tmuxaynıdır tmux new-session). Sizin .tmux.confkendi pencereleri / bölmeleri için bir oturum (yaratır newiçin bir takma ad new-session) ve başka oturumda örtük için yaratılıyor new-sessionbaşlatarak belirtilen komuta tmux bir komut argüman olmadan. Varsayılan durum çubuğunu kullanıyorsanız, [1]“ekstra” oturumdayken durum çubuğunun sol tarafında bir tane görürsünüz (içinde oluşturulan ilk oturum .tmux.confnumarası 0'dır).

Ekstra oturum oluşturmaktan kaçınmak istiyorsanız, o zaman tmux attachdüz kullanın tmux. Sizden gelen komutlar, .tmux.conf0 oturumu oluşturarak çalıştırılır ve ardından müşteriniz yenisini oluşturmak yerine o oturuma eklenir.


2
Tamam, belki burada bir balina sandviçi kadar kalın biriyim, ama şu anda sadece splitwiçinde olan bir yapılandırma dosyası var - başka hiçbir şey - ve hala bölünmüş bir ekran alamıyorum çünkü yazıyor geçerli oturumu kuramıyorum. Daha newönce eklersem, bir pencere, bir pencere alırım. Öyle görünmüyorum, hayatımın başlangıcında iki bölme almam için.
SADECE

1
Bir config dosyası new, sonra tmux ile splitwbaşladığımda benim için çalışıyor . Hatırlanması gereken bir şey (veya seçeneği ile belirtilen dosyanın ) sadece zaten çalışan bir sunucu yoksa kullanılmasıdır. Bir sunucunun üzerinden çalışıp çalışmadığını kontrol edin . Bir sunucu zaten çalışırken komutları bir dosyadan çalıştırmak istiyorsanız, aşağıdaki gibi yapın: (eğer sunucu yoksa bunu çalıştırırsanız (veya dosya ilk önce dosyanız çalışır). tmux attach.tmux.conf-ftmux lstmux source-file /path/to/conf-file-that-creates-a-session-and-windows \; attach.tmux.conf-fsource-file
Chris Johnsen,

Config dosyası -f ile belirtiliyor - bu yüzden gidiyorum tmux new -f myconfig. Bu yapılandırma dosyasının içeriği sadece new onu içerir splitw. Komut satırını denemeden önce, tüm tmux işlemlerini öldürüyorum tmux -f myconfig. İki bölmem yok. Gerçekten bu noktada ne yapacağımı bilemiyorum (sadece tmux'dan vazgeçmek dışında).
SADECE

4
@Just: Kullansanız -fda kullanmasanız da, tmuxbir komut bağımsız değişkeni olmadan aynıdır tmux new-session(ki bu, yeni sunucular için, config dosyanızın ne yaparsa üzerine yeni bir oturum oluşturacaktır). Önceden bölünmüş pencereniz oturum 0'da oluşturulur, ancak örtük new-sessionkomut fazladan bir oturum oluşturur (ve bu gruba eklenir) (oturum 1; [1]durum satırında aranır). tmux -f myconfig attachBölünmüş pencerenizi gizleyen yeni oturumu oluşturmaktan kaçınmak için kullanın .
Chris Johnsen

1
Tamam, sanırım okumayı öğrenmek sonunda benim için karşılığını verir. :) Çaba ve cevap için teşekkürler. Artık her şey yolunda gidiyor. Keşke burada "devirme kavanozu" olarak tanınan bir ün olsaydı, böylece size kabul edilmiş bir cevaptan daha fazlasını verebilirim.
SADECE

9

Ne demek istediğinizi "el ile girerek" anladığımdan emin değilim, ancak bu şekilde yapıyorum. Pencere yöneticimin başlattığı bir "autostart" betiği yazdım. Bu içerir:

tmux start-server                                                                                                                                                                                                                                                                                                                                                            
for i in ~/sessions_tmux/*.session; do "$i"; done

her .session dosyası şöyle görünür:

#!/bin/bash

SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
    echo "Already inside a tmux session, do not know what to do"
    exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
    exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter

Bekle, dahası var! Konsole ile yüklediğim gittikçe artan sayıda .session dosyam var:

konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs

work_console.tabs şöyle görünür:

.
.
.
title: projectx;;    command: tmux attach -t projectx
title: flaskr;;      command: tmux attach -t flaskr_tutorial
.
.
.

Sonra konsole başlatmak için F12'ye basın.


konsole kırılmış gibi görünüyor, bu yüzden iyi çalışan Terminal'e geçtim . Tmux-users e-posta listesinde daha ayrıntılı bir yazı var.
John Schmitt

1
Sadece küçük bir yorumla değiştirebilirsiniz! -z 'testlerinde' -n 'ile;)
lilorox

6

3 sunucu izleme görevi başlatmak istediğinizi varsayalım (burada ping localhost) yapılandırma dosyaları ve kaydedilmiş oturumlarla uğraşmanıza gerek yok. Hepsi komut satırından yapılabilir.

tmux new-session 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    split-window 'ping  127.0.0.1' \; \
    select-layout even-vertical

Sadelik için teşekkürler - tam olarak aradığım örnek!
DSZ

5

Teamocil'i tmux pencereleri / oturumları otomatikleştirmek için çok faydalı buldum .

Ruby'de yazılmıştır, yani yüklü olmasına ihtiyacınız vardır.

İşte örnek bir yapılandırma:

session:
  name: 'my project'
  windows:
    -name: vim
     root: '~/code/my_project'
     splits:
       - cmd: vim
       - cmd: guard

Pencerelerin ve bölmelerin bir düzenlemesine sahip olabilirsiniz.



4

**

  • Oturumu Kurtarın!

** Kendim gibi tembel bir yönetici için, kusursuz bir şekilde inşa etmeye çalışarak saatler harcamak yerine, tmux oturumunu kurtarmayı tercih ederim. 30'dan fazla sunucuyu yönetiyorum ve tmux oturumlarım dinamik, yapılandırma her zaman değişiyor. Boynumdaki ağrıydı , yakın zamanda tux-dirilişinin bu eklentinin sadece harika olduğunu keşfedene kadar . Bir şans ver. Şu anda, Ubuntu depolarının tmux 1.8'i var, bu eklentinin 1.9'a ihtiyacı var, bu yüzden manuel olarak yükseltme yapmanız gerekecek

sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install  tmux=2.0-1~ppa1~t

Bundan sonra tarafından yükleyebilirsiniz

git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path

Ardından bu satırı ~ / .tmux.conf altına (dd ~ / .tmux.conf yoksa boş bir dosya oluşturun)

run-shell ~/clone/path/resurrect.tmux

Ayrıca bu satırı ~ / .tmux.conf komutunun sonuna ekliyorum, böylece eklenti çalıştırdığım tüm programlar için oturumları kurtarıyor

set -g @resurrect-processes ':all:'

Sonra tmux ortamını tekrar yükleyin.

tmux source-file ~/.tmux.conf

Bu kadar! Bitirdiniz. Şimdi, tmux'u normal şekilde çalıştırın, bölmelerinizi yeniden boyutlandırın, yeni bölmeler oluşturun, yeni oturumlar oluşturun ... vb. Ulaştığınız konfigürasyondan memnun olduğunuzda (birkaç pencerede ve birkaç oturumda), oturumu kaydetmek için ctrl + b ve ardından ctrl + s tuşlarına basın. Sonuçları test etmek için, sadece tüm tmux'ları öldürün

killall tmux

Ardından, tekrar tmux çalıştırın

tmux

Daha sonra, tmux içinden ctrl + b ve sonra ctrl + r (geri yükleme için) öğesini tıklayın. Sihirli bir şekilde, tüm pencereleriniz, bölmeleriniz ve oturumlarınız aynı geometri ve düzenleme ile geri yüklenir. Umarım bu yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.