GNU Screen 和 Tmux:技巧和窍门

GNU Screen 和 Tmux:技巧和窍门

所以我非常喜欢多路复用器,比如GNU 屏幕多路复用但是即使使用 Screen 多年,我仍然认识到那里有很多我不知道的东西(而且我只使用 Tmux 几个月,所以情况更糟)。

您在这些软件上使用了什么配置和技巧和窍门(两个或每个软件上,无所谓)?

我使用这个作为我的屏幕配置(我想我是从 Ubuntu 的默认配置改编而来的screenrc):

shell -$SHELL
startup_message off
defscrollback 1000
hardstatus alwayslastline '%{= wk}%?%-Lw%?%{r}(%{k}%n*%f%t%?(%u)%?%{r})%{k}%?%+Lw%?%?%= %m/%d %C%A'
activity ''
termcapinfo xterm* 'hs:ts=\\E]2;:fs=\\007:ds=\\E]2;screen\\007'

这是一个简单的配置,可以让状态栏显示一些颜色,但我确信我可以用屏幕和 Tmux 做更多的事情,并且我很想了解它。

答案1

对于这个群体来说,这可能有点简单,但我发现将其添加到 .profile 的末尾很有用,这样当我通过 ssh 远程登录时,我就可以读取 MOTD,然后切换到屏幕。

if [ -n "$SSH_TTY" ]
then
        read -p "Press <ENTER> to continue." enterkey
        exec /usr/bin/screen -D -R
fi

答案2

我的 .bashrc 中有这个。如果您没有运行 screen,则此函数ssh在执行时会像往常一样调用。如果您在 screen 内运行(并且您没有更改默认值$TERM),它首先将窗口名称设置为远程主机(以及任何可选参数)。当您打开许多远程连接时,跟踪远程连接非常方便,我认为这在我们的工作中很常见。

function ssh () {
if [ $TERM = "screen-bce" ]
    then
    screen -X title "$*" 
    /usr/bin/ssh $*
else
    /usr/bin/ssh $*
fi
}

我还使用bind ^A windowlist -b它来轻松访问窗口列表(只需点击 ctrl-A 两次)。

轻松为所有 Windows 提供 ssh-agent 支持:

setenv SSH_AUTH_SOCK $HOME/.screen-ssh-agent
screen 10 ssh-agent -a $SSH_AUTH_SOCK $SHELL

然后,在任何窗口中,当您开始新会话时,只需执行一次 ssh-add。

最后,当从另一个屏幕会话连接到远程屏幕会话时,您可以使用screen -x -e ^Vv将控制序列设置为 CTRL-V(例如)。这样就避免了必须链接 CTRL-A 来控制远程会话。

答案3

你可能会考虑屏风screen,它本质上是围绕和的数百条技巧、窍门、配置、键绑定、状态脚本和最佳实践的集合tmux

答案4

尽管我开始使用 tmux 来查看窗格,但我仍然使用 screen 来复用其中的窗口。tmux 据称具有此功能,但将窗格从一个窗口切换到另一个窗口对我来说并不直观,两个连接的 tmux 查看器也不能在同一个守护进程中查看不同的窗口(screen -x 行为),因此需要 screen-in-tmux 解决方案。这两个 tmux.conf 绑定是我花了最长时间才弄清楚的,我每天都在使用。

第一个宏是 bind M(ctrl-b shift-M),用于在鼠标窗格选择器和鼠标高亮/复制之间切换 tmux。您仍然可以在窗格选择模式下复制/粘贴,但必须按住 shift(如果您养成了这个习惯,那么在其他应用程序中复制/粘贴会让您有点痛苦,我告诉您)。该宏还使当前选择的模式在视觉上显而易见。

bind M set mouse-select-pane \; if '[ "`tmux show -v mouse-select-pane`"= "on" ]' "set status-bg cyan \; set pane-active-border-bg cyan" "set status-bg green \; set pane-active-border-bg default"

第二个命令是绑定 CL(ctrl-b ctrl-l),它将采用 4 个窗格的任意布局并将其转换为我喜欢的布局。很多时候,我会发现我在一个我认为在屏幕内的窗格中按下了 ctrl-d 来关闭它,但实际上没有屏幕会话,它关闭了窗格。由于我的布局是 v-split、h-split、v-split 和一些调整大小,如果我不小心关闭了最后一个窗口以外的任何窗口,那么关闭我需要重新创建的窗格和最后一个窗格之间的任何中间窗格,然后重新创建并调整窗格的大小,最后重新连接我在关闭窗格时可能必须分离的任何屏幕会话,这将变得很麻烦(没有双关语的意思)。使用此宏,我可以创建一个新的窗格,ctrl-b {(swap-pane -U 的默认绑定),直到它恢复到正确的顺序,然后点击宏,一切都恢复正常。我喜欢的布局可能与您的不同,因此一旦您有了喜欢的布局,请使用命令list-windows获取如下所示的布局字符串。

bind C-L select-layout a18e,155x94,0,0[155x18,0,0,6,155x75,0,19{81x75,0,19,31,73x75,82,19[73x22,82,19,32,73x52,82,42,33]}]

如果这对您来说太幼稚,那么还有 tmuxinator 来进行窗格管理。

相关内容