如何设置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-windowselect-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启动时自动恢复
Interesting Posts