it-swarm.com.de

Wie kann man tmux so einrichten, dass es mit dem angegebenen Fenster startet

Wie kann man tmux so einrichten, dass es mit dem angegebenen Fenster startet

206
satoru

Sie können ein kleines Shell-Skript schreiben, das tmux mit den erforderlichen Programmen startet. Ich habe folgendes in einem Shell-Skript, das ich dev-tmux nenne. Eine Entwicklungsumgebung:

#!/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

Jedes Mal, wenn ich meine Lieblingsentwicklungsumgebung starten möchte, kann ich dies einfach tun

$ dev-tmux
188
Amjith

Ich habe versucht, ein komplexes Gitternetz zu erstellen und musste immer wieder Fenster wechseln und aufteilen. Hier sind meine Erkenntnisse:

tmux new-session \;

Lässt Sie mit einer neuen Sitzung beginnen. Um es horizontal oder vertikal zu teilen, verwenden Sie split-window -h oder -v anschließend wie folgt:

tmux new-session \; split-window -v \; split-window -h \;

Erzeugt 3 Bereiche wie folgt:

------------
|          |
|----------|
|    |     |
------------

Um Befehle in diesen Bereichen auszuführen, fügen Sie sie einfach mit dem Befehl send-keys 'my-command' hinzu, und C-m führt ihn aus:

tmux new-session \; \
  send-keys 'tail -f /var/log/monitor.log' C-m \; \
  split-window -v \; \
  split-window -h \; \
  send-keys 'top' C-m \; 

Und die resultierende Sitzung sollte so aussehen.

------------
|  tail    |
|----------|
|    | top |
------------

Jetzt habe ich versucht, den unteren linken Bereich erneut zu unterteilen, also entweder mit last-pane zurückkehren oder in komplexeren Fenstern mit select-pane -t 1, wobei 1 die Nummer des Bereichs ist, der beginnend mit 0 erstellt wurde.

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 \;

Macht das. Grundsätzlich müssen Sie wissen, wie Sie sich mit split-window und select-pane auskennen. Es ist auch praktisch, mit -p 75 eine prozentuale Größe des von split-window erstellten Bereichs zu übergeben, um mehr Kontrolle über die Größe der Bereiche zu haben.

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 \;

Welches Ergebnis ergibt eine Sitzung, die so aussieht

------------------
|      tail      |
|----------------|
|          | top |
|----------|     |
| weechat  |     |
------------------

Ich hoffe, dass dies tmux Enthusiasten in der Zukunft hilft.

95
Afri

Sie können verschiedene Sessions aus Ihrem .tmux.conf wie folgt erzeugen:

# initialize sessions
bind S source-file ~/.tmux/session1 
bind s source-file ~/.tmux/session2

Formatieren Sie anschließend die Sitzungen wie gewünscht:

#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

Dies würde 2 Fenster öffnen, von denen das zweite foo/bar heißt und vertikal in zwei Hälften (50%) geteilt wird, wobei foo über bar läuft. Der Fokus liegt auf Fenster 2 (foo/bar), oberer Bereich (foo).

Sie können dann Ihre bevorzugte tmux-Sitzung (in diesem Fall session1) mit starten PrefixShifts

87
jasonwryan

Mit tmuxinator - können Sie mehrere Sitzungen konfigurieren, und Sie können auswählen, welche Sitzung zu einem bestimmten Zeitpunkt gestartet werden soll. Sie können Befehle in bestimmten Fenstern oder Fenstern starten und Fenstern Titel geben. Hier ist ein Beispiel für die Entwicklung von Django-Anwendungen .

Beispiel-Konfigurationsdatei:

# ~/.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: [email protected]_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 [email protected]

Eine vollständige Erklärung finden Sie unter README unter dem obigen Link. 

46
Hamish Downer

einen Blick auf @ https://github.com/remiprev/teamocil

sie können Ihre Struktur mit YAML angeben

windows:
  - name: sample-window
    splits:
      - cmd: vim
      - cmd:
        - ipython
        width: 50
      - cmd:
        height: 25
16
locojay
:~$ tmux new-session "tmux source-file ~/session1"  

session 1

neww
split-window -v 'ipython'  
split-window -h  
new-window 'mutt'  

erstellen Sie einen Alias ​​in .bashrc

:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc  
:~$ . ~/.bashrc  
:~$ tmux_s1  
14
m_majeres

Von meinem "get.all" -Skript, das ich jeden Morgen aufrufe, um eine Reihe nachfolgender "get.XXX" -Aufträge auszuführen, um die von mir verfolgte Software zu aktualisieren. Einige von ihnen werden automatisch beendet. Andere erfordern mehr Interaktion, sobald der get beendet ist (wie zum Beispiel die Frage nach dem Bau von 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
10
Randal Schwartz

Wenn Sie den Bildschirm nur in zwei Fenster teilen möchten (z. B. horizontal), können Sie diesen Befehl ausführen (keine tmux- oder Shell-Skripts erforderlich):

tmux new-session \; split-window -h \;

Ihr Bildschirm wird so aussehen:

[[email protected] ~]$                      │[[email protected] ~]$ 
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
[10] 0:[email protected]:~*                  "localhost.localdomain" 19:51 31-янв-16
8
ks1322

Zuerst hatte ich den Ansatz von @jasonwryan , aber wenn Sie mehr als 2 Konfigurationen haben, kann es verwirrend werden.

Also habe ich eine Alias-Funktion erstellt:

tmx () {
    tmux "$2" source-file "$HOME/.tmux/$1.conf";
}

In ~/.tmux/ habe ich mehrere Sitzungen für viele Zwecke. Zum Beispiel arbeite ich für verschiedene Unternehmen, die sich in einer anderen Entwicklungsumgebung befinden. Mit der obigen Alias-Funktion kann ich einfach Folgendes aufrufen: tmx company1 und die von mir benötigte Konfiguration laden.

Update: Der Zweck von "$ 2" nach dem tmux-Befehl besteht darin, dass Sie zusätzliche tmux-Argumente übergeben können.

8
danbruegge

Und so mache ich es:

#!/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

Ich habe für jedes Projekt eine Datei. Sie können sie auch zu Hobbyprojekten zusammenstellen.

Sie können es auch in den Ordner ~/bin verschieben, zu PATH hinzufügen und den Namen tmux_my_awesome_project angeben. Dann können Sie es von jedem Ort aus ausführen.

4
Artur Małecki

Das funktioniert für mich. Erstellen Sie 5 Fenster mit den angegebenen Namen und wählen Sie automatisch das home-Fenster aus.

new  -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n Ruby
selectw -t 1
4
cevaris

Das Plugin tmux-continuum speichert Ihre tmux-Sitzung automatisch und lädt sie beim nächsten Start von tmux. Sie sollte einfacher einzurichten sein als einige der benutzerdefinierten Skriptlösungen.

Eigenschaften:

  • ständige einsparung der tmux-umgebung 
  • automatischer tmux-start, wenn computer/server eingeschaltet ist 
  • automatische Wiederherstellung beim Start von tmux

Um Ihre Sitzung bei Bedarf zu speichern, können Sie das tmux-resurrect -Plugin verwenden. tmux-resurrect ist auch erforderlich, um tmux-continuum auszuführen.

tmux-resurrect speichert alle kleinen Details aus Ihrer tmux-Umgebung So kann es nach einem Neustart des Systems vollständig wiederhergestellt werden (oder wenn... Sie sich danach fühlen). Es ist keine Konfiguration erforderlich. Sie sollten sich wie Sie fühlen. tmux niemals verlassen.

1
Padhraic

tmuxp JSON- oder YAML-Sitzungskonfiguration und eine Python-API unterstützen. Eine einfache Tmuxp-Konfigurationsdatei zum Erstellen einer neuen Sitzung in YAML-Syntax lautet:

session_name: 2-pane-vertical
windows:
  - window_name: my test window
    panes:
      - pwd
      - pwd
1

Sie sollten es in Ihrer tmux-Konfigurationsdatei (~/.tmux.conf) angeben, zum Beispiel:

new mocp
neww mutt

new -d
neww
neww

(öffnet eine Sitzung mit 2 Fenstern, wobei Mocp zuerst und Mutt in zweiter Sekunde gestartet wurde, und eine weitere freistehende Sitzung mit 3 leeren Fenstern).

1
Victor Deryagin

Ich habe dieses Skript erstellt . Es braucht keinen Tuxer, Ruby oder andere. Es ist nur ein Bash-Skript, konfigurierbar:

Eine Datei namens config sollte etwa Folgendes enthalten:

combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')

und der Bash-Code sollte sein:

#!/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
1
sensorario

Dafür gibt es ein tmux-Plugin.

Check out tmux-resurrect

Stellen Sie die tmux-Umgebung nach dem Neustart des Systems wieder her.

Tmux ist großartig, außer wenn Sie den Computer neu starten müssen. Sie verlieren alle laufenden Programme, Arbeitsverzeichnisse, Fensterlayouts usw. Es gibt hilfreiche Verwaltungstools, die jedoch erst nach der Konfiguration und fortlaufenden Aktualisierung des Workflows oder dem Starten neuer Projekte erforderlich sind.

tmux-resurrect speichert alle kleinen Details aus Ihrer tmux-Umgebung, so dass sie nach einem Neustart des Systems (oder wenn Sie möchten) vollständig wiederhergestellt werden kann. Es ist keine Konfiguration erforderlich. Sie sollten sich fühlen, als würden Sie tmux nie aufgeben.

Oder tmux-Kontinuum

Eigenschaften:

  • ständige einsparung der tmux-umgebung
  • automatischer tmux-start, wenn computer/server eingeschaltet ist
  • automatische Wiederherstellung beim Start von tmux
1
Syakur Rahman

Versuchen Sie bro , es ist ein Projekt-Bootstrapper.

Es bietet eine einfache Möglichkeit, mit tmux zu interagieren.

Es sieht ungefähr so ​​aus:

#!/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

Zum Starten eines Projekts müssen Sie nur den folgenden Befehl ausführen:

bro start <project_name>

0
Asur

Sie können tmux hooks verwenden, um Befehle auszuführen, wenn eine neue Sitzung erstellt wird. Dies wird insbesondere mit dem Hook session-created erreicht.

Um den Bildschirm beispielsweise auf drei Arten zu teilen, während htop unten rechts ausgeführt wird, können Sie Ihrer ~/.tmux.conf -Datei die folgende Zeile hinzufügen:

set-hook -g session-created 'split -h ; split -v top'

Der Vorteil dieser Methode ist, dass Sie tmux nicht auf spezielle Weise ausführen müssen (z. B. Shell-Skript oder Alias), um das gewünschte Ergebnis zu erzielen. Sie können dies auch mit tmux new-session -A -s mysession kombinieren, das in diese andere Antwort beschrieben ist, sodass die Hook-Befehle nur beim erstmaligen Erstellen der Sitzung und nicht bei nachfolgenden Anhängen ausgeführt werden.

Diese Funktion wurde von d15d54c2c im Jahr 2016 hinzugefügt. Die erste Version, die sie enthält, ist 2.4.

0
kevmitch

Ich habe gerade versucht, alle Ideen auf dieser Seite zu verwenden, und ich mochte keine davon. Ich wollte nur eine Lösung, die tmux mit einem bestimmten Satz von Fenstern startete, als sich mein Terminal öffnete. Ich wollte auch, dass es idempotent ist, d. H. Das Öffnen eines neuen Terminalfensters übernimmt die tmux-Sitzung von der vorherigen.

Bei den oben genannten Lösungen werden häufig mehrere TMux-Sitzungen geöffnet, und ich möchte nur eine. Zuerst habe ich dies zu meinem ~/.bash_profile hinzugefügt:

tmux start-server
if [[ -z "$TMUX" ]]
then
  exec tmux attach -d -t default
fi

dann fügte ich meinem ~/.tmux.conf folgendes hinzu:

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

jedes Mal, wenn ich ein Terminal starte oder tmux oder was auch immer starte, füge ich entweder mein bestehendes gewünschtes Setup (die Sitzung mit dem Namen default) hinzu oder erstelle eine neue Session mit diesem Setup.

0
Phil Hollenback