如何设置tmux使其在打开指定的窗口时启动?
如何设置tmux使其在打开指定的窗口时启动?
你可以编写一个小的shell脚本来启动所需程序的tmux。 我有一个shell脚本中的以下内容,我称之为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
你可以从.tmux.conf
不同的会话, .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上方运行的情况下垂直分割一半(50%)。 焦点将在窗口2(foo / bar),顶部窗格(foo)中。
然后,您可以使用Prefix Shift s来启动您的首选tmux会话(在本例中为session1)
使用tmuxinator – 它允许您configuration多个会话,并且您可以select在任何给定时间启动哪个会话。 您可以在特定的窗口或窗格中启动命令并为窗口赋予标题。 以下是开发Django应用程序的一个示例 。
示例configuration文件:
# ~/.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
请参阅上述链接的自述文件以获取完整说明。
我试图创build一个复杂的窗格网格,不得不一再处理切换和分割窗格。 这是我的学习:
tmux new-session \;
让你开始一个新的会话。 要水平或垂直使用split-window -h
或-v
随后,如下所示:
tmux new-session \; split-window -v \; split-window -h \;
创build3个窗格,如下所示:
------------ | | |----------| | | | ------------
要在该窗格中运行命令,只需使用send-keys 'my-command'
命令和Cm
来执行命令:
tmux new-session \; \ send-keys 'tail -f /var/log/monitor.log' Cm \; \ split-window -v \; \ split-window -h \; \ send-keys 'top' Cm \;
结果会话应该是这样的。
------------ | tail | |----------| | | top | ------------
现在,我试着再次划分左下方的窗格,因此使用last-pane
或更复杂的窗口切换回select-pane -t 1
,其中1
是从0
开始创build的顺序窗格的编号。
tmux new-session \; \ send-keys 'tail -f /var/log/monitor.log' Cm \; \ split-window -v \; \ split-window -h \; \ send-keys 'top' Cm \; \ select-pane -t 1 \; \ split-window -v \; \ send-keys 'weechat' Cm \;
那是。 基本上知道你的方式与split-window
和select-pane
是你所需要的。 使用-p 75
可以方便地传递由split-window
创build的窗格的百分比大小,以更好地控制窗格的大小。
tmux new-session \; \ send-keys 'tail -f /var/log/monitor.log' Cm \; \ split-window -v -p 75 \; \ split-window -h -p 30 \; \ send-keys 'top' Cm \; \ select-pane -t 1 \; \ split-window -v \; \ send-keys 'weechat' Cm \;
希望未来能帮助tmux
爱好者。
看看@ 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"
会话1
neww split-window -v 'ipython' split-window -h new-window 'mutt'
在.bashrc中创build一个别名
:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc :~$ . ~/.bashrc :~$ tmux_s1
从我每天早上调用的“get.all”脚本运行一系列后续的“get.XXX”作业来刷新我跟踪的软件。 其中一些是自动退出。 一旦获得完成,其他人需要更多的交互(如要求build立emacs)。
#!/bin/sh tmux att -t get || tmux \ new -s get -n capp \; \ send-keys 'get.capp' Cm \; \ neww -n emacs \; \ send-keys 'get.emacs' Cm \; \ neww -n git \; \ send-keys 'get.git' Cm \; \ neww -n mini \; \ send-keys 'get.mini' Cm \; \ neww -n port \; \ send-keys 'get.port' Cm \; \ neww -n rakudo \; \ send-keys 'get.rakudo' Cm \; \ neww -n neil \; \ send-keys 'get.neil && get.neil2 && exit' Cm \; \ neww -n red \; \ send-keys 'get.red && exit' Cm \; \ neww -n cpan \; \ send-keys 'get.cpan && exit' Cm \; \ selectw -t emacs
如果你只是想在2个窗格(水平方向)上拆分屏幕,你可以运行这个命令(不需要tmux或shell脚本):
tmux new-session \; split-window -h \;
你的屏幕会看起来像这样:
[ks@localhost ~]$ │[ks@localhost ~]$ │ │ │ │ │ │ │ │ │ │ │ [10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
首先我有@jasonwryan的方法,但是如果你有更多的2个configuration,它可能会让人困惑。
所以我创build了一个别名函数:
tmx () { tmux "$2" source-file "$HOME/.tmux/$1.conf"; }
在~/.tmux/
我有很多用途的多个会话。 例如,我为不同的公司拥有彼此的开发环境。 所以用上面的别名函数,我可以简单地调用: tmx company1
并加载我需要的configuration。
更新:在tmux
命令之后的“$ 2”的目的是,你能够传递额外的tmux参数。
这对我有用。 使用给定名称创build5个窗口并自动select到home
窗口。
new -n home neww -n emacs neww -n puppet neww -n haskell neww -n ruby selectw -t 1
这就是我如何做到的:
#!/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
名称。 那么你将能够从每个地方运行它。
你应该在你的tmuxconfiguration文件( ~/.tmux.conf
)中指定它,例如:
new mocp neww mutt new -d neww neww
(用2个窗口打开一个会话,其中mocp在第一个启动,而mutt在第二个,另一个分离的会话有3个空的窗口)。
我已经创build了这个脚本 。 它不需要tmuxinator,ruby或其他。 这只是一个可configuration的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}" Cm fi ((window++)) done tmux select-window -tStarTmux:0 tmux attach-session -d -tStarTmux
tmuxp支持JSON或YAML会话configuration和一个python API。 用YAML语法创build一个新会话的简单tmuxpconfiguration文件是:
session_name: 2-pane-vertical windows: - window_name: my test window panes: - pwd - pwd
插件tmux-continuum会自动保存你的tmux会话并在下一次tmux启动时加载它,应该比这里的一些自定义脚本解决scheme更容易设置。
特征:
- 持续节省三重复合环境
- 计算机/服务器打开时自动启动tmux
- tmux启动时自动恢复
要按需保存会话,可以使用tmux-resurrect插件。 tmux-resurrect也需要运行tmux-continuum
tmux-resurrect保存了tmux环境中的所有细节信息,以便在系统重新启动(或者当你感觉像)时可以完全恢复。 不需要configuration。 你应该觉得你永远不会退出tmux。
我只是尝试在这个页面上使用所有的想法,我不喜欢他们中的任何一个。 我只是想要一个解决scheme,当我的terminal打开时,用一组特定的窗口启动tmux。 我也希望它是幂等的,即打开一个新的terminal窗口接pipe从前一个tmux会话。
上面的解决scheme往往倾向于打开多个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
现在每当我启动一个terminal或者启动tmux或者其他什么的时候,我要么重新连接到我现有的所需设置(会话名为default
),要么用这个设置创build一个新的会话。
这里有一个tmux插件。
检查tmux-resurrect
系统重启后还原tmux环境。
Tmux是伟大的,除非你必须重新启动计算机。 你失去了所有正在运行的程序,工作目录,窗格布局等。这里有一些有用的pipe理工具,但是随着工作stream程的发展或者你开始新的项目,它们需要初始configuration和持续更新。
tmux-resurrect保存了tmux环境中的所有细节信息,以便在系统重新启动(或者当你感觉像)时可以完全恢复。 不需要configuration。 你应该觉得你永远不会退出tmux。
或者tmux-continuum
特征:
- 持续节省三重复合环境
- 计算机/服务器打开时自动启动tmux
- tmux启动时自动恢复