Как настроить 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.