Wie kann ich tmux so einrichten, dass es mit dem angegebenen geöffneten Windows startet?
Antworten
Zu viele Anzeigen?Sie können ein kleines Shell-Skript schreiben, das tmux mit den erforderlichen Programmen startet. Ich habe das Folgende 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
So kann ich jedes Mal, wenn ich meine bevorzugte Entwicklungsumgebung starten möchte, einfach Folgendes tun
$ dev-tmux
Ich habe versucht, ein komplexes Raster von Fenstern zu erstellen und musste immer wieder zwischen den Fenstern wechseln und sie teilen. Hier sind meine Lektionen:
tmux new-session \;
Beginnt mit einer neuen Sitzung. Um sie horizontal oder vertikal zu teilen, verwenden Sie split-window -h
ou -v
und dann so:
tmux new-session \; split-window -v \; split-window -h \;
Erzeugt 3 Fenster, etwa so:
------------
| |
|----------|
| | |
------------
Um Befehle in diesen Fenstern auszuführen, fügen Sie sie einfach mit der Option send-keys 'my-command'
Befehl und C-m
der sie ausführt:
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \;
Die resultierende Sitzung sollte dann so aussehen.
------------
| tail |
|----------|
| | top |
------------
Nun habe ich versucht, den unteren linken Bereich erneut zu unterteilen, also entweder mit last-pane
oder in komplexeren Windows mit der Option select-pane -t 1
donde 1
ist die Nummer des Fensters in der Reihenfolge, die beginnend mit 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 \;
Tut das. Grundsätzlich kennen Sie sich aus mit split-window
et select-pane
ist alles, was Sie brauchen. Es ist auch praktisch, mit -p 75
eine prozentuale Größe des Bereichs, der durch split-window
um mehr Kontrolle über die Größe der Fenster 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 \;
Das Ergebnis ist eine Sitzung, die wie folgt aussieht
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
Ich hoffe, das hilft tmux
Enthusiasten in der Zukunft.
Sie können verschiedene Sitzungen von Ihrem .tmux.conf
etwa so:
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
Und dann formatieren Sie die Sitzungen so, wie Sie es wünschen:
#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
Dadurch würden 2 Fenster geöffnet, von denen das zweite foo/bar hieße und vertikal in zwei Hälften geteilt wäre (50 %), wobei foo über bar verläuft. Der Fokus wäre in Fenster 2 (foo/bar), oberer Bereich (foo).
Sie können dann Ihre bevorzugte tmux-Sitzung (in diesem Fall session1) mit PrefixShifts
Verwenden Sie tmuxinator - können Sie mehrere Sitzungen konfigurieren und wählen, welche Sie zu einem bestimmten Zeitpunkt starten möchten. Sie können Befehle in bestimmten Fenstern oder Bereichen starten und den Fenstern Titel geben. Hier ist ein Beispiel für die Verwendung bei der Entwicklung von Django-Anwendungen .
Beispiel einer 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: 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
Eine ausführliche Erklärung finden Sie in der README unter dem obigen Link.
- See previous answers
- Weitere Antworten anzeigen