有没有办法从 tmux 会话中找出有关任何窗格的当前工作目录的信息?
我想编写一个 bash 脚本,将当前窗格的目录更改为另一个窗格的目录,即使该窗格中已经运行了一个程序或脚本。
我想做的方法是导航到窗格 1,然后转到窗格 2,按一个热键,窗格 2 现在将更改为与窗格 1 相同的密码。
说,我有两个窗口,窗口 1 包含 2 个窗格(1, 2),窗口 2 包含 3 个窗格(1,2,3),我在窗口 1 的窗格 1 中,我想直接跳到窗格2在窗口2,PREFIX w这choose-window将列出所有窗口的会话,这样我可以跳进右边的窗口,但它不会列出窗格,PREFIX q这display-panes将让我只能选择在当前窗口右边的窗格中,但不穿过窗户。
所以我想知道是否有任何命令可以让我跨窗口选择窗格。最好的解决方案是choose-window,新命令不仅会列出所有窗口,还会列出每个窗口内的所有窗格,就像tree在目录中一样。
我注意到在 tmux 中滚动很麻烦,我想知道是否可以让 tmux 将它们传递给应用程序或终端。
我可能在这里理解错误,但我观察到我可以在术语(我的终端模拟器)中滚动手册页,但在 tmux 运行时不能滚动。即使 tmux 未运行,手册页中的鼠标滚动在 xterm 中也不起作用,这让我认为终端处理鼠标事件,然后将它们发送到应用程序。
所以我目前对鼠标事件流程的理解是这样的:
terminal -> tmux
Run Code Online (Sandbox Code Playgroud)
所以问题似乎是 tmux 阻止了事件到达底层应用程序。想要的是这个:
terminal -> tmux -> application
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会将 Terminology 的本机滚动与 tmux 的复制模式(假设鼠标模式已启用并且它自动进入和退出复制模式)相结合,但似乎不可能,因为 tmux 可以自行处理滚动。
这和我来的时候一样接近我想要的。鼠标滚动工作并自动进入和退出复制模式,但在应用程序中,man它会滚动出应用程序到旧的终端历史记录。该解决方案还包括一个非官方补丁,这使得可移植性成为一个问题。
那么是否有可能让 tmux 完全忽略鼠标信号并将它们发送到底层终端或应用程序?
我tmux-plugins/tmux-resurrect用来恢复 tmux 会话。尽管如此,我只能保存一个会话。是否可以使用此插件在 tmux 中保存多个会话?
当我在窗格中滚动时,我当前的 shell 提示不再出现在屏幕上,然后我选择任何内容(例如,当我向同事解释某事时,只是指向一条线),结果将是,当我释放选择后单击鼠标按钮,滚动位置将重置到输出的底部。因此,如果您不在输出的底部,基本上您无法在一个滚动位置多次选择任何内容。这很不愉快,我可以解决这个问题吗?
我喜欢并排设置两个会话/窗口集,并使用独立的窗口切换,就像屏幕截图一样 - 现在我通过启动两个单独的 Konsole 实例来做到这一点,每个实例都有tmux attach -t session_name_here,而AwesomeWM只是将它们并排放置,就像任何 X 客户端一样。
这种实现这种布局的方式有一些缺点,主要是便携性:
tmux,而不依赖任何外部应用程序?如何?
更新:将windows独立切换部分加粗
删除 tmux resurrect 并清理整个文件夹 ~/.tmux/ 后,同时在 bash (MacOsX El Captain) 中启动 tmux,我收到信息:
“恢复会话:2016 年 9 月 15 日星期四 17:15:04 CEST”
我假设我没有完全删除 tmux ressurrect 或 tmuxinator 但我想不出禁用它的方法。
编辑:
EDIT2:命令 cat tmux-server-4144.log 的输出 | 会话
1473953899.570430 cmdq 0x7fe92ae04d10: bind-key $ command-prompt -I#S "rename-session '%%'"
1473953899.570436 preparing state for bind-key $ command-prompt -I#S "rename-session '%%'" (client 0x0)
1473953899.573639 cmdq 0x7fe92ae09cd0: new-session
1473953899.573643 preparing state for new-session (client 0x7fe92c003000)
1473953899.573646 cmd_find_current_session: …Run Code Online (Sandbox Code Playgroud) 我可以通过单击来浏览窗口prefix + window number,但是当它们的数量非常多时,它会变得非常不方便。我希望能够通过从列表中选择一个合适的来浏览它们。我的意思是这样的:
如何显示这样的窗口选择列表对话框?
多年来,我一直在 tmux 上为嵌套实例使用不同的前缀键。我\在自己的服务器上使用,但a对于我连接到的任何其他服务器并启动嵌套的 tmux 会话。
我发现了这个技巧,它使用Shift+Arrow Keys在窗口和嵌套实例之间切换,这要好得多。
但是,当我使用 PuTTY(使用 Windows)时它不起作用,但当我使用KiTTY时它起作用。我无法弄清楚为什么它不能与 PuTTY 一起使用。
Ctrl+ v,Arrow Keys使用任一程序时在终端中返回相同的代码。
编辑:
在开始赏金之后,我意识到Ctrl+ v,SHIFT+Arrow Keys实际上确实提出了不同的代码。
油灰:
SHIFT+ Left Arrow=^[OD
SHIFT+ Right Arrow=^[OC
SHIFT+ Up Arrow=^[OA
SHIFT+ Down Arrow=^[OB
猫咪:
SHIFT+ Right Arrow=^[[1;2D
SHIFT+ Right Arrow= …
我想使用 tmux 为终端创建一个“焦点模式”,有点像goyo 为 vim 所做的:
我的想法是通过将窗口分成三个窗格来实现这一点,然后将中心窗格设置为固定的最大值(可能是 80 列?可能是 100?可能根据终端窗口大小不同的最大值,例如响应式 Web 布局?)并设置侧窗格以平均填充剩余的列。我还希望它可以在不同尺寸的屏幕上工作,这样我就可以在我的笔记本电脑和台式机上使用它。
目前,我能想到的唯一方法是与 shell 合作(即,获取终端宽度,tput cols然后使用数学运算计算每个窗格所需的宽度$(()))。我对此没有意见,但是如果在 tmux 中有一种内置方法可以完成此操作,我会因为错过它而感到非常愚蠢。
所以……有吗?
这不太重要;看到顶部有提示的大部分空白窗格确实还不错。我知道 tmux 有clock-mode(例如),它会覆盖窗格的内容并显示其他内容。所以我想知道是否有办法完全隐藏非活动窗格的内容。到目前为止,我能想到的最好的方法是将 fg 和 bg 设置为相同的颜色:
:select-pane -t:.1 -P 'fg=black,bg=black'
Run Code Online (Sandbox Code Playgroud)
如果tmux 中的窗格有边距功能,那么这一切都可以更轻松地完成。据我所知,此功能不存在,但我远非 tmux 专家。有没有可能它在那里而我只是不知道它?