Answers:
您的配置文件正在运行,但是有一些麻烦。
首先,您正在启动的命令(例如ls)非常快地完成运行。命令的窗口和窗格已创建,但是一旦退出每个命令,它们就会消失。
如果您的目标是在最终配置中实际使用这样的“一次性”命令,则您可能应该使用window选项remain-on-exit
(并可能使用session选项set-remain-on-exit
为会话中创建的所有窗口提供默认设置)。当remain-on-exit
设置为一个窗口,它不会消失的命令退出时。您可能希望将映射respawn-window
到键(注意:respawn-window
将重新生成原始命令;respawn-pane
在tmux 1.5中也可用以重新生成各个窗格)。
bind-key R respawn-window
# set global r-o-e so that initial window of initial session gets it
set -g set-remain-on-exit on
# create a session and its windows/panes
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls
# restore global r-o-e
set -g set-remain-on-exit off
# let session r-o-e inherit from global value for future windows
set -u set-remain-on-exit
或者,如果您不介意初始窗口是数字1而不是数字0,那么我们可以避免更改全局值:
bind-key R respawn-window
# create a session with a throw-away window
new true
# for future windows, stay open after the command exits
set set-remain-on-exit on
# create the windows we really want
neww -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls
# for future windows, revert r-o-e to global value
set -u set-remain-on-exit
如果您只是ls
用作简化的占位符命令,而您实际上打算在Windows /窗格中生成某种类型的交互式命令,那么您可能应该只生成最终要运行的命令。如果您打算命令的时间太长启动过程中使用它TMUX测试,然后替换一个壳或其它简单的交互式命令(例如top
,sqlite3
等)。
new-session
是默认命令其次,在没有命令参数(例如)的情况下运行tmuxtmux
等同于使用new-session
命令(即tmux
与相同tmux new-session
)。您.tmux.conf
为其窗口/窗格创建一个会话(new
是的别名new-session
),并且正在为new-session
通过启动tmux而没有命令参数指定的隐式命令创建另一个会话。如果使用默认状态栏,[1]
则在“额外”会话中(在中创建的初始会话.tmux.conf
为数字0),您将在状态栏的左侧看到a 。
如果要避免创建额外的会话,请使用tmux attach
代替plain tmux
。您的命令.tmux.conf
将运行,创建会话0,然后您的客户端将附加到该会话,而不是创建一个新的会话。
new
,splitw
当我通过开启tmux时对我有用tmux attach
。要记住的一件事是.tmux.conf
(或使用该-f
选项指定的文件)仅在没有服务器正在运行时才使用。检查服务器是否正在通过运行tmux ls
。如果要在服务器已经运行时从文件运行命令,请按以下步骤操作:(tmux source-file /path/to/conf-file-that-creates-a-session-and-windows \; attach
如果在没有服务器的情况下运行此命令,则您的.tmux.conf
(或-f
文件)将先运行,然后运行source-file
文件)。
tmux new -f myconfig
。该配置文件的内容仅 包含new
后跟splitw
。在尝试命令行之前,我正在杀死所有tmux进程tmux -f myconfig
。我没有两个窗格。在这之后,我真的不知所措(除了放弃tmux)。
-f
不tmux
带命令参数的情况相同tmux new-session
(对于新服务器,它将在配置文件执行的操作的基础上创建一个新会话)。拆分前的窗口是在会话0中创建的,但是隐式new-session
命令正在创建(并附加到)额外的会话(会话1;[1]
在状态行中查找)。使用tmux -f myconfig attach
以避免创建隐藏了预裂窗新的会话。
我不确定我是否理解“手动输入”的意思,但这就是我的做法。我写了一个窗口管理器启动的“自动启动”脚本。它包含:
tmux start-server
for i in ~/sessions_tmux/*.session; do "$i"; done
每个.session文件的外观如下所示:
#!/bin/bash
SESSION_NAME="flaskr_tutorial"
if [[ ! -z "$TMUX" ]] || [[ ! -z "$TMUX_PANE" ]]; then
echo "Already inside a tmux session, do not know what to do"
exit 1
fi
tmux -q has-session -t "$SESSION_NAME"
if [ $? ]; then
exit 0
fi
NEWCWD=~/projects/flaskr/
( cd "${NEWCWD}"; tmux new-session -d -s "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'vim flaskr.py' Enter
( cd "${NEWCWD}"; tmux split -h -t "$SESSION_NAME" )
tmux send-keys -t "$SESSION_NAME" 'sudo tail -F -n 100 /var/log/messages | ccze' Enter
等等,还有更多!我使用konsole加载的.session文件越来越多:
konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs
其中work_console.tabs看起来像这样:
.
.
.
title: projectx;; command: tmux attach -t projectx
title: flaskr;; command: tmux attach -t flaskr_tutorial
.
.
.
然后按F12键启动konsole。
类似于teamcoil的另一个替代方案是tmuxinator,它正在积极开发中并且效果很好。它还建议(和那种审查)的惊人TMUX:生产鼠标自由发展,从语用书架。
**
**我发现对于像我这样的懒惰管理员,我宁愿节省tmux的时间,而不是花费数小时来尝试完美地构建它。我管理着30多台服务器,我的tmux会话是动态的,配置一直在变化。脖子很痛,直到我最近发现tmux-resurrect 这个插件很棒。试试看。当前,Ubuntu存储库具有tmux 1.8,此插件需要1.9,因此您需要手动升级
sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install tmux=2.0-1~ppa1~t
之后,您可以通过安装
git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path
然后dd这行到〜/ .tmux.conf的底部(如果〜/ .tmux.conf不可用,请创建一个空文件)
run-shell ~/clone/path/resurrect.tmux
我还在〜/ .tmux.conf的末尾添加了这一行,以便该插件保存我运行的所有程序的会话
set -g @resurrect-processes ':all:'
然后重新加载tmux环境。
tmux source-file ~/.tmux.conf
而已!大功告成 现在,正常运行tmux,调整窗格大小,创建新窗格,创建新会话...等。对配置感到满意时(在多个窗口和多个会话中),只需单击ctrl + b,然后单击ctrl + s即可保存会话。为了测试结果,只需杀死所有tmux
killall tmux
然后,再次运行tmux
tmux
然后,从tmux中单击ctrl + b,然后单击ctrl + r(用于还原)神奇地,所有窗口,窗格和会话都以相同的几何形状和排列进行还原。希望这会有所帮助。
splitw
里面没有其他东西,而且仍然没有分屏显示,因为它说无法建立当前会话。如果new
在其之前添加,我将得到一个窗口,一个窗格。在我的一生中,我似乎无法在启动时得到两个窗格。