Как настроить tmux так, чтобы он запускался с указанными окнами?

Как настроить tmux так, чтобы он запускался с открытыми окнами?

+198
10 апр. '11 в 1:36
источник поделиться
17 ответов

Вы можете написать небольшой скрипт оболочки, который запускает 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
+174
22 апр. '11 в 6:35
источник

Вы можете создавать разные сеансы из своего .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

+81
22 апр. '11 в 7:00
источник

Я пытался создать сложную сетку панелей и снова и снова занимался переключением и разбиением панелей. Вот мои знания:

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 в будущем.

+80
12 окт. '16 в 21:56
источник

Используйте 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 в приведенной выше ссылке для получения полного объяснения.

+44
18 апр. '12 в 19:22
источник

посмотрите @https://github.com/remiprev/teamocil

вы можете указать свою структуру, используя YAML

windows:
  - name: sample-window
    splits:
      - cmd: vim
      - cmd:
        - ipython
        width: 50
      - cmd:
        height: 25
+15
25 мая '11 в 2:01
источник
:~$ 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  
+13
09 янв. '14 в 23:26
источник

Из моего "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
+9
05 июл. '11 в 22:48
источник

Сначала у меня был подход от @jasonwryan, но если у вас более двух конфигураций, он может запутаться.

Итак, я создал функцию псевдонима:

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

В ~/.tmux/ у меня есть несколько сеансов для многих целей. Например, я работаю для разных компаний, у которых есть каждая другая среда. Поэтому с помощью функции псевдонима выше я могу просто вызвать: tmx company1 и загрузить нужную конфигурацию.

Обновление: Назначение "$ 2" после команды tmux состоит в том, что вы можете передавать дополнительные аргументы tmux.

+8
19 окт. '16 в 7:56
источник

Если вы просто хотите разделить экран на 2 панели (например, горизонтально), вы можете запустить эту команду (нет необходимости в сценариях tmux или shell):

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

Экран будет выглядеть следующим образом:

[ks@localhost ~]$                      │[ks@localhost ~]$ 
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
                                       │
[10] 0:ks@localhost:~*                  "localhost.localdomain" 19:51 31-янв-16
+8
31 янв. '16 в 16:52
источник

И вот как я это делаю:

#!/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. Затем вы сможете запускать его из каждого места.

+4
13 июл. '16 в 14:38
источник

Это работает для меня. Создание 5 окон с указанными именами и автоматический выбор в окне home.

new  -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n ruby
selectw -t 1
+4
18 нояб. '14 в 17:18
источник

Вы должны указать его в конфигурационном файле tmux (~/.tmux.conf), например:

new mocp
neww mutt

new -d
neww
neww

(открывается один сеанс с двумя окнами с mocp, запущенным в первом и mutt во втором, а другой отдельный сеанс с 3 пустыми окнами).

+1
10 апр. '11 в 3:39
источник

Я создал этот 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
+1
16 апр. '15 в 21:59
источник

Плагин tmux-continuum автоматически сохранит ваш сеанс tmux и загрузит его при следующем запуске tmux, должен быть проще настроить, чем некоторые пользовательских решений script.

Особенности:

  • непрерывное сохранение среды tmux
  • автоматический запуск tmux при включении компьютера/сервера
  • автоматическое восстановление при запуске tmux

Чтобы сохранить сеанс по требованию, вы можете использовать плагин tmux-resurrect. tmux-resurrect также требуется запустить tmux-continuum

tmux-resurrect сохраняет все мелкие детали из вашей среды tmux поэтому он может быть полностью восстановлен после перезагрузки системы (или когда вы чувствую себя так). Конфигурация не требуется. Вы должны чувствовать себя как вы никогда не оставляйте tmux.

+1
17 апр. '17 в 6:44
источник

tmuxp поддерживает настройку сеанса JSON или YAML и API-интерфейс python. Простой конфигурационный файл tmuxp для создания нового сеанса в синтаксисе YAML:

session_name: 2-pane-vertical
windows:
  - window_name: my test window
    panes:
      - pwd
      - pwd
+1
29 дек. '15 в 17:55
источник

Я просто попытался использовать все идеи на этой странице, и мне не понравился ни один из них. Я просто хотел решение, которое запустило 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), либо создаю новый сеанс с этой настройкой.

0
24 июн. '15 в 18:03
источник

Для этого есть плагин tmux.

Отъезд tmux-resurrect

Восстановить среду tmux после перезагрузки системы.

Tmux отлично, если только вам не нужно перезагружать компьютер. Вы теряете все запущенные программы, рабочие каталоги, макеты панелей и т.д. Существуют полезные инструменты управления, но они требуют начальной настройки и непрерывных обновлений по мере развития вашего рабочего процесса или запуска новых проектов.

tmux-resurrect сохраняет все мелкие детали из вашей среды tmux, поэтому может быть полностью восстановлен после перезагрузки системы (или когда вам это нравится). Конфигурация не требуется. Вы должны чувствовать, что никогда не покидаете tmux.

Или tmux-continuum

Особенности:

  • непрерывное сохранение среды tmux
  • автоматический запуск tmux при включении компьютера/сервера
  • автоматическое восстановление при запуске tmux
0
13 июл. '17 в 3:14
источник

Посмотрите другие вопросы по меткам или Задайте вопрос