Как настроить tmux так, чтобы он запускался с открытыми окнами?
Как настроить tmux так, чтобы он запускался с указанными окнами?
Ответ 1
Вы можете написать небольшой скрипт оболочки, который запускает 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
Ответ 2
Я пытался создать сложную сетку панелей и снова и снова занимался переключением и разбиением панелей. Вот мои знания:
tmux new-session \;
Получается, что вы начали с нового сеанса. Чтобы разделить его горизонтальное или вертикальное использование split-window -h
или -v
впоследствии, вот так:
tmux new-session \; split-window -v \; split-window -h \;
Создает 3 панели, например:
------------
| |
|----------|
| | |
------------
Чтобы запускать команды в этих панелях, просто добавьте их с помощью команды send-keys 'my-command'
и Cm
которая ее выполняет:
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
в будущем.
Ответ 3
Вы можете создавать разные сеансы из своего .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) с помощью Prefix Shift s
Ответ 4
Используйте 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: [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]
См. README в приведенной выше ссылке для получения полного объяснения.
Ответ 5
посмотрите @https://github.com/remiprev/teamocil
вы можете указать свою структуру, используя YAML
windows:
- name: sample-window
splits:
- cmd: vim
- cmd:
- ipython
width: 50
- cmd:
height: 25
Ответ 6
:~$ tmux new-session "tmux source-file ~/session1"
сессии1
neww
split-window -v 'ipython'
split-window -h
new-window 'mutt'
создать псевдоним в .bashrc
:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc
:~$ . ~/.bashrc
:~$ tmux_s1
Ответ 7
Из моего "get.all" script, который я вызываю каждое утро, чтобы запустить кучу последующих заданий "get.XXX", чтобы обновить программное обеспечение, которое я отслеживаю. Некоторые из них автоматически уходят. Другие требуют больше взаимодействия после завершения get (например, просят создать 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
Ответ 8
Сначала у меня был подход от @jasonwryan, но если у вас более двух конфигураций, он может запутаться.
Итак, я создал функцию псевдонима:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
В ~/.tmux/
у меня есть несколько сеансов для многих целей. Например, я работаю для разных компаний, у которых есть каждая другая среда. Поэтому с помощью функции псевдонима выше я могу просто вызвать: tmx company1
и загрузить нужную конфигурацию.
Обновление: Назначение "$ 2" после команды tmux
состоит в том, что вы можете передавать дополнительные аргументы tmux.
Ответ 9
Если вы просто хотите разделить экран на 2 панели (например, горизонтально), вы можете запустить эту команду (нет необходимости в сценариях tmux или shell):
tmux new-session \; split-window -h \;
Экран будет выглядеть следующим образом:
[[email protected] ~]$ │[[email protected] ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:[email protected]:~* "localhost.localdomain" 19:51 31-янв-16
Ответ 10
И вот как я это делаю:
#!/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
. Затем вы сможете запускать его из каждого места.
Ответ 11
Это работает для меня. Создание 5 окон с указанными именами и автоматический выбор в окне home
.
new -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n ruby
selectw -t 1
Ответ 12
Вы должны указать его в конфигурационном файле tmux (~/.tmux.conf
), например:
new mocp
neww mutt
new -d
neww
neww
(открывается один сеанс с двумя окнами с mocp, запущенным в первом и mutt во втором, а другой отдельный сеанс с 3 пустыми окнами).
Ответ 13
Я создал этот script. Ему не нужны tmuxinator, ruby или другие. Это всего лишь bash script, настраиваемый:
Файл с именем 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
Ответ 14
tmuxp поддерживает настройку сеанса JSON или YAML и API-интерфейс python. Простой конфигурационный файл tmuxp для создания нового сеанса в синтаксисе YAML:
session_name: 2-pane-vertical
windows:
- window_name: my test window
panes:
- pwd
- pwd
Ответ 15
Плагин tmux-continuum автоматически сохранит ваш сеанс tmux и загрузит его при следующем запуске tmux, должен быть проще настроить, чем некоторые пользовательских решений script.
Особенности:
- непрерывное сохранение среды tmux
- автоматический запуск tmux при включении компьютера/сервера
- автоматическое восстановление при запуске tmux
Чтобы сохранить сеанс по требованию, вы можете использовать плагин tmux-resurrect. tmux-resurrect также требуется запустить tmux-continuum
tmux-resurrect сохраняет все мелкие детали из вашей среды tmux поэтому он может быть полностью восстановлен после перезагрузки системы (или когда вы чувствую себя так). Конфигурация не требуется. Вы должны чувствовать себя как вы никогда не оставляйте tmux.
Ответ 16
Для этого есть плагин tmux.
Отъезд tmux-resurrect
Восстановить среду tmux после перезагрузки системы.
Tmux отлично, если только вам не нужно перезагружать компьютер. Вы теряете все запущенные программы, рабочие каталоги, макеты панелей и т.д. Существуют полезные инструменты управления, но они требуют начальной настройки и непрерывных обновлений по мере развития вашего рабочего процесса или запуска новых проектов.
tmux-resurrect сохраняет все мелкие детали из вашей среды tmux, поэтому может быть полностью восстановлен после перезагрузки системы (или когда вам это нравится). Конфигурация не требуется. Вы должны чувствовать, что никогда не покидаете tmux.
Или tmux-continuum
Особенности:
- непрерывное сохранение среды tmux
- автоматический запуск tmux при включении компьютера/сервера
- автоматическое восстановление при запуске tmux
Ответ 17
Попробуйте братан, это загрузчик проекта.
Он обеспечивает легкий интерфейс для взаимодействия с 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>
Ответ 18
Я просто попытался использовать все идеи на этой странице, и мне не понравился ни один из них. Я просто хотел решение, которое запустило 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
), либо создаю новый сеанс с этой настройкой.
Ответ 19
Вы можете использовать ловушки 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.