所以,我想创建一个特定于项目的tmux
会话,自动在某些窗格中弹出某些命令。按照在线教程和tmux
手册页,这是我为配置文件提出的:
new -n estruct ls
neww -n estruct2 ls
splitw -v -p 50 -t 0 ls
Run Code Online (Sandbox Code Playgroud)
结果是……没什么。 tmux
以单个窗口和该窗口中的单个窗格启动,不执行任何命令。
我将如何制作一个配置文件,该文件实际上允许我使用预先执行的某些命令创建一组窗口和窗格?
Chr*_*sen 36
您的配置文件正在运行,但有一些复杂情况。
首先,您正在启动的命令(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
Run Code Online (Sandbox Code Playgroud)
或者,如果您不介意初始窗口是数字 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
Run Code Online (Sandbox Code Playgroud)
如果您仅用ls
作简化的占位符命令,并且您实际上打算在窗口/窗格中生成某种类型的交互式命令,那么您可能应该只生成您打算最终运行的命令。如果您打算命令的时间太长启动过程中使用它TMUX测试,然后替换一个壳或其它简单的交互式命令(例如top
,sqlite3
等)。
new-session
是默认命令其次,在没有命令参数(例如)的情况下运行tmuxtmux
等效于使用new-session
命令(即tmux
与 相同tmux new-session
)。您.tmux.conf
为其窗口/窗格创建一个会话(new
是 的别名new-session
),并且正在为new-session
通过启动tmux指定的隐式命令创建另一个会话,而没有命令参数。如果您使用的是默认状态栏,[1]
当您处于“额外”会话(在.tmux.conf
0 中创建的初始会话)时,您将在状态栏的左侧看到。
如果您想避免创建额外的会话,请使用tmux attach
而不是普通的tmux
. 来自您的命令.tmux.conf
将运行,创建会话 0,然后您的客户端将附加到该会话而不是创建一个新会话。
小智 10
我不确定我是否理解您所说的“手动输入”是什么意思,但这就是我的做法。我写了一个我的窗口管理器启动的“自动启动”脚本。它包含了:
tmux start-server
for i in ~/sessions_tmux/*.session; do "$i"; done
Run Code Online (Sandbox Code Playgroud)
每个 .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
Run Code Online (Sandbox Code Playgroud)
等等,还有更多!我用 konsole 加载了越来越多的 .session 文件:
konsole --background-mode --profile Shell --tabs-from-file ~/sessions_tmux/work_console.tabs
Run Code Online (Sandbox Code Playgroud)
其中 work_console.tabs 看起来像这样:
.
.
.
title: projectx;; command: tmux attach -t projectx
title: flaskr;; command: tmux attach -t flaskr_tutorial
.
.
.
Run Code Online (Sandbox Code Playgroud)
然后我按 F12 启动 konsole。
假设您要启动 3 个服务器监控任务(此处为 ping localhost),则无需弄乱配置文件和保存的会话。这一切都可以从命令行完成。
tmux new-session 'ping 127.0.0.1' \; \
split-window 'ping 127.0.0.1' \; \
split-window 'ping 127.0.0.1' \; \
select-layout even-vertical
Run Code Online (Sandbox Code Playgroud)
我发现teamocil对于自动化 tmux 窗口/会话非常有用。
它是用 Ruby 编写的,因此您需要安装它。
这是一个示例配置:
session:
name: 'my project'
windows:
-name: vim
root: '~/code/my_project'
splits:
- cmd: vim
- cmd: guard
Run Code Online (Sandbox Code Playgroud)
您可以安排窗口和拆分。
归档时间: |
|
查看次数: |
45281 次 |
最近记录: |