Відповіді:
Ви можете написати невеликий скрипт оболонки, який запускає tmux з необхідними програмами. У сценарії оболонки у мене є таке, що я називаю dev-tmux. Робоче середовище:
#!/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
Тому кожен раз, коли я хочу запустити своє улюблене середовище розробників, я можу просто це зробити
$ dev-tmux
vim
там стоїть команда, яка повинна виконуватися на першій (і лише на той час) панелі вікна. Якщо ви хочете назвати сеанс "vim", то так, ви маєте рацію, ви повинні використовувати -s
прапор. Цілий синтаксис: tmux new-session -d -s SessionName -n WindowName Command
Я намагався створити складну сітку панелей, і мені доводилося стикатися з перемиканням та розбиттям панелей знову і знову. Ось моє навчання:
tmux new-session \;
Починає з нового сеансу. Для того, щоб розділити його горизонтальне або вертикальне використання split-window -h
або -v
згодом, як це:
tmux new-session \; split-window -v \; split-window -h \;
Створює 3 області, наприклад:
------------
| |
|----------|
| | |
------------
Щоб запустити команди на цих панелях, просто додайте їх до send-keys 'my-command'
команди та C-m
виконує її:
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \;
І отриманий сеанс повинен виглядати так.
------------
| tail |
|----------|
| | top |
------------
Тепер я спробував знову розділити нижню ліву панель, щоб переключитися або назад за допомогою last-pane
, або у більш складних вікнах, select-pane -t 1
звідки 1
номер області, в порядку, створеному починаючи з 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 \;
Це робить. В основному, ви знаєте свій шлях навколо, split-window
і select-pane
це все, що вам потрібно. Також зручно передавати -p 75
розмір панелі у відсотках, створений для того, 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 \;
Це призводить до того, що сеанс виглядає так
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
Сподіваюся, що допоможе tmux
ентузіастам у майбутньому.
-h -p 30
створює горизонтальну панель з 30% наявної висоти; -v -p 75
однаковий для вертикалі з 75% шириною.
\:
? Я бачив, як сценарії працюють з цим і без нього.
\;
передає крапку з комою до tmux замість bash, дозволяючи командам надсилатись одним викликом tmux. stackoverflow.com/questions/20913198/…
Ви можете джерела різних сеансів з вашого .tmux.conf
подібного:
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
А потім відформатуйте сеанси як потрібно:
#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
Це відкриє 2 вікна, друге з яких буде названо foo / bar і розділене вертикально навпіл (50%) з foo, що працює над смужкою. Фокус був би у вікні 2 (foo / bar), верхній частині (foo).
Потім можна запустити бажаний сеанс tmux (у цьому випадку session1) за допомогою PrefixShifts
Prefix Shift S
мені потрібно, щоб я був у tmux, і ваш файл намагається розпочати новий сеанс, який tmux не любить і не буде робити, якщо ви не змусите його.
Використовуйте tmuxinator - він дозволяє налаштувати кілька сеансів, і ви можете вибрати, який з них запустити в будь-який момент часу. Ви можете запускати команди в конкретних вікнах або областях і давати заголовки вікнам. Ось приклад використання при розробці додатків Django .
Зразок конфігураційного файлу:
# ~/.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
Для отримання повного пояснення див. README за вищезазначеним посиланням.
подивіться @ https://github.com/remiprev/teamocil
ви можете вказати свою структуру за допомогою 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
? Я не можу ніде знайти цю команду. ~ Схоже, це є new-window
, хоча я не можу зрозуміти, чому ви використовуєте і довгу, і коротку форму.
Спочатку у мене був підхід від @jasonwryan, але якщо у вас більше 2-х конфігурацій, це може заплутатися.
Тому я створив функцію псевдоніму:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
У ~/.tmux/
мене є кілька сеансів для багатьох застосувань. Наприклад, я працюю в різних компаніях, які мають один одного в середовищі розробників. Тож за допомогою функції псевдоніму я можу просто зателефонувати: tmx company1
та завантажити потрібну мені конфігурацію.
Оновлення: мета "$ 2" після tmux
команди полягає в тому, щоб ви могли передавати додаткові аргументи tmux.
no server running on /tmp/tmux-1000/default
). Ось чому мені потрібно було виправити команду tmux new-session
. Посилання github.com/fatso83/dotfiles/commit / ...
З мого сценарію "get.all", який я щоранку закликаю запускати купу наступних завдань "get.XXX", щоб оновити програмне забезпечення, яке я відстежую. Деякі з них автоматично припиняють роботу. Інші потребують більшої взаємодії після завершення отримання (наприклад, прохання створити 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
Якщо ви просто хочете розділити екран на 2 області (скажімо по горизонталі), ви можете запустити цю команду (не потрібні сценарії tmux або оболонки):
tmux new-session \; split-window -h \;
Ваш екран буде виглядати так:
[ks@localhost ~]$ │[ks@localhost ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
І ось як я це роблю:
#!/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
У мене є один файл для кожного мого проекту. Також ви можете згрупувати їх, щоб мати для роботи кілька для хобі-проектів.
Також ви можете перемістити його в ~/bin
папку, додати її PATH
та дати tmux_my_awesome_project
ім’я. Тоді ви зможете запустити його з кожного місця.
Спробуйте, брато , це завантажувач проекту.
Він забезпечує простий апіс для взаємодії tmux
.
Це виглядає приблизно так:
#!/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
Для запуску проекту все, що потрібно зробити, це виконати наступну команду -
bro start <project_name>
Ознайомтесь із скріншотом нижче, він показує, як розпочати роботу з bro
використанням програми tmux
.
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
Для цього існує плагін tmux.
Перевірте tmux-resurrect
Відновлення середовища tmux після перезавантаження системи.
Tmux чудовий, за винятком випадків, коли вам доведеться перезавантажити комп'ютер. Ви втрачаєте всі запущені програми, робочі каталоги, макети панелей тощо. Там є корисні інструменти управління, але вони вимагають початкової конфігурації та постійного оновлення у міру розвитку робочого процесу або запуску нових проектів.
tmux-resurrect зберігає всі дрібні деталі з вашого середовища tmux, щоб його можна було повністю відновити після перезавантаження системи (або коли ви відчуваєте, що вам це подобається). Конфігурація не потрібна. Ви повинні відчувати, що ніколи не киньте tmux.
Або tmux-континуум
Особливості:
- постійне збереження середовища tmux
- автоматичний запуск tmux при включенні комп'ютера / сервера
- автоматичне відновлення при запуску tmux
Ви повинні вказати його у своєму файлі config tmux ( ~/.tmux.conf
), наприклад:
new mocp
neww mutt
new -d
neww
neww
(відкриває один сеанс з 2 вікнами з mocp, запущеним у першому та mutt у другому, та іншим окремим сеансом з 3 порожніми вікнами).
Я створив цей сценарій . Тут не потрібен tmuxinator, рубін чи інші. Це просто баш сценарій, який можна налаштувати:
Файл з іменем config повинен містити щось подібне:
combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')
а код bash повинен бути:
#!/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
не запускає сервер самостійно. Дивіться github.com/tmux/tmux/isissue/182
Плагін tmux-континуум автоматично збереже ваш tmux сеанс і завантажить його наступного разу, коли tmux запуститься, має бути простішим у налаштуванні, ніж деякі звичайні рішення скриптів тут.
Особливості:
- постійне збереження середовища tmux
- автоматичний запуск tmux при включенні комп'ютера / сервера
- автоматичне відновлення при запуску tmux
Щоб зберегти сеанс на вимогу, ви можете використовувати плагін tmux-resurrect . tmux-resurrect також потрібен для запуску tmux-континууму
tmux-resurrect зберігає всі дрібні деталі з вашого середовища tmux, щоб його можна було повністю відновити після перезавантаження системи (або коли ви відчуваєте, що вам це подобається). Конфігурація не потрібна. Ви повинні відчувати, що ніколи не киньте tmux.
Ви можете використовувати гачки tmux для виконання команд при створенні нового сеансу. Зокрема, це досягається за допомогою session-created
гачка.
Наприклад, щоб розділити екран трьома способами із запуском htop у правому нижньому куті, ви можете додати у ~/.tmux.conf
файл наступний рядок :
set-hook -g session-created 'split -h ; split -v top'
Перевага цього методу полягає в тому, що вам не потрібно запускати tmux будь-яким спеціальним способом (тобто скриптом оболонки або псевдонімом), щоб отримати бажаний результат. Ви також можете поєднати це з tmux new-session -A -s mysession
описаним у цій іншій відповіді таким чином, що команди гака виконуються лише при першому створенні сеансу, а не при наступних вкладеннях.
Ця функція була додана d15d54c2c ще в 2016 році. Перший реліз, який включив її, - це 2,4.
Я просто спробував використати всі ідеї на цій сторінці, і жодна з них мені не сподобалась. Я просто хотів рішення, яке запустило tmux із певного набору вікон, коли мій термінал відкрився. Я також хотів, щоб це було ідентично, тобто відкриття нового вікна терміналу бере на себе сеанс tmux від попереднього.
Вищезазначені рішення часто схильні відкривати кілька сеансів tmux, і я хочу лише одне. По-перше, я додав це до свого ~/.bash_profile
:
tmux start-server
if [[ -z "$TMUX" ]]
then
exec tmux attach -d -t default
fi
то я додав у своє ~/.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
тепер кожного разу, коли я запускаю термінал або запускаю tmux чи будь-що інше, я або приєднуюся до своєї потрібної установки (назва сесії default
), або створюю новий сеанс із цією установкою.
tmux start_server
не запускає сервер самостійно. Дивіться github.com/tmux/tmux/isissue/182
bash --rcfile
щоб отримати гарну оболонку в науковому Linux з включеною конкретною версією devtools. Залишимо це тут, якщо хтось спробує зробити те саме.tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"