Answers:
您可以编写一个小的shell脚本,用所需的程序启动tmux。我在称为dev-tmux的shell脚本中具有以下内容。开发环境:
#!/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
其中where 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 \;
那样做。Basicaly知道周围的路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%的情况相同。
\:
什么?我已经看到有或没有此功能的脚本。
\;
将分号而不是bash传递给tmux,从而允许通过一次调用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,并且foo在bar上方运行时将垂直拆分为一半(50%)。焦点将位于窗口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
有关完整说明,请参见上面链接的自述文件。
看看@ 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
并加载所需的配置。
更新:tmux
命令后“ $ 2”的目的是,您可以传递其他tmux args。
no server running on /tmp/tmux-1000/default
)的tmux会话时,该功能实际上不起作用。这就是为什么我需要使用来修补命令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
这就是我的方法:
#!/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
命名。然后,您将可以在每个地方运行它。
尝试兄弟,这是一个项目引导程序。
它提供了易于交互的api 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
api。
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
有一个tmux插件。
系统重启后恢复tmux环境。
Tmux很棒,除非必须重新启动计算机。您会丢失所有正在运行的程序,工作目录,窗格布局等。那里有一些有用的管理工具,但是随着工作流程的发展或启动新项目,它们需要进行初始配置和不断更新。
tmux-resurrect会保存tmux环境中的所有小细节,因此可以在系统重新启动后(或在您觉得有必要时)将其完全还原。无需配置。您应该觉得自己永远不会退出tmux。
特征:
- 持续保存tmux环境
- 打开计算机/服务器后自动启动tmux
- 启动tmux时自动还原
您应该在tmux配置文件(~/.tmux.conf
)中指定它,例如:
new mocp
neww mutt
new -d
neww
neww
(打开一个带有2个窗口的会话,首先打开mocp,然后打开mutt,另一个会话分离3个空窗口)。
我已经创建了这个脚本。它不需要解毒剂,红宝石或其他。它只是一个可配置的bash脚本:
名为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/issues/182
插件tmux-continuum将自动保存您的tmux会话并在下次tmux启动时加载它,它比此处的某些自定义脚本解决方案更容易设置。
特征:
- 持续保存tmux环境
- 打开计算机/服务器后自动启动tmux
- 启动tmux时自动还原
要按需保存会话,可以使用tmux-resurrect插件。运行tmux-continuum还需要tmux-resurrect
tmux-resurrect会保存tmux环境中的所有小细节,因此可以在系统重新启动后(或在您感觉合适时)将其完全还原。无需配置。您应该觉得自己永远不会退出tmux。
创建新会话时,可以使用tmux挂钩执行命令。具体来说,这是使用session-created
挂钩实现的。
例如,要在右下方运行htop的情况下以三种方式拆分屏幕,可以在~/.tmux.conf
文件中添加以下行:
set-hook -g session-created 'split -h ; split -v top'
这种方法的优点是您不必以任何特殊方式(例如,shell脚本或别名)运行tmux即可获得所需的结果。您还可以将其与其他答案中tmux new-session -A -s mysession
所述的内容结合使用,以使hook命令仅在您首次创建会话时运行,而不在后续的附件上运行。
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/issues/182
bash --rcfile
启用了特定devtools版本的科学linux结合使用。如果有人尝试执行此操作,则将其保留在此处。tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"