GNU屏幕和Tmux:提示和技巧

所以我是像GNU Screen和Tmux这样的多路复用器的忠实粉丝 ,但即使使用Screen多年,我仍然认识到有很多事情我不知道(我只用了Tmux几个月, )。

你在这些软件上使用什么configuration,技巧和诀窍(两者或两者都无关紧要)?

我使用这个作为我的屏幕configuration(我想我适应了这个从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' 

这是一个简单的configuration,以保持状态栏显示一些颜色,但我相信,有更多的事情,我可以做屏幕和Tmux,并希望知道它。

这对于这个人群来说可能有点简单,但是我发现将它添加到.profile文件的末尾是非常有用的,所以当我通过ssh远程login时,我可以读取MOTD,然后切换到屏幕。

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

我在我的.bashrc中有这个。 如果你没有运行屏幕,这个函数在执行的时候像平常一样调用ssh 。 如果您正在屏幕内运行(并且您没有更改默认的$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两次)。

简单的ssh代理支持所有窗口:

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

然后在任何窗口中,当你开始一个新的会话时,你只需要添加一次ssh。

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

你可能会考虑byobu ,它本质上是围绕着screentmux的数百个提示,技巧,configuration,键绑定,状态脚本和最佳实践的集合。

即使我开始为窗格使用tmux,我仍然使用屏幕来复用其中的窗口。 tmux据说具有这种function,但是将窗格从一个窗口交换到另一个窗口对我来说并不直观,两个连接的tmux查看器也不能在同一个守护进程(屏幕-x行为)中查看不同的窗口,因此也是屏幕在tmux的解决scheme。 这些是两个tmux.conf绑定,我花了我最长的时间,我每天都在使用。

首先绑定M(ctrl-b shift-M),切换鼠标窗格select器和鼠标高亮/复制之间的tmux。 你仍然可以在窗格select模式下复制/粘贴,但是你必须保持转换(如果你习惯了这种习惯,复制/粘贴任何其他应用程序会让你有点痛苦,让我告诉你)。 这个macros也使得它在视觉上清楚地知道当前select了哪种模式。

 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,我想在屏幕内部closures它,但是却没有屏幕会话,并closures了窗格。 由于我的布局是v分裂,h分裂,v分裂和一些resize,如果我不小心closures了任何,但最后一个窗口,它成为一个痛苦(没有双关语意图)closures任何中间窗格之间我需要重新创build和最后一个,然后重新创build和调整窗格大小,最后重新附加任何屏幕会话,我可能不得不分开杀死窗格。 有了这个macros,我可以创build一个新的窗格ctrl-b {(交换窗格-U的默认绑定),直到返回正确的顺序,然后点击macros,一切恢复正常。 我的首选布局与您的布局不太可能相同,所以一旦您拥有了您喜欢的布局,请使用list-windows命令获取如下所示的布局string。

 bind CL 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]}] 

如果你觉得太天真了,总是有窗口pipe理的tmuxinator。