screen用法小记

screen也是早就会用的工具,但发现近来一段时间不用,就知道^a^a和detach attach这些简单的命令了。同样的情况还有tmux、svn、git,学习的时候一是觉得知识简单,二十觉得经常在用,不可能忘掉。可知世事无常,好记忆总不如烂博客,于是吃一见长一智,来个亡羊补牢罢。

第一步,启动screen:
screen
或者启动时执行一条shell命令:
screen vim notification.py

启动选项:
screen -c: 指定screen配置文件,默认配置文件是~HOME/.screenrc
screen -d: detach screen, 在screen会话里使用,等同于^a d
screen -r [pid.sessionname]: resume a detached screen
screen -R: resume first appropriate screen session 
screen -e ^xy: 将ctrl+x设置为控制字符,如果输入ctrl+x,则认为输入了y(Set the command character to x, and the character generating a literal command character (when typed after the command character) to y. The defaults are C-a and a, which can be specified as ‘-e^Aa’),默认设置是 -e^Aa
screen -h num: 设置defscrollback,即滚动条缓冲区大小
screen -ls or -list: 显示所有的screen session
screen -wipe: 同screen -ls一样,但会清除已经死掉的session
screen -S sessionname: 设置sessionname
screen -v: print version information
screen -x: attach to a session which is already attached elsewhere (multi-display mode). Screen refuses to attach from within itself. But when cascading multiple screens, loops are not detected; take care.

screen配置:
screen配置来自三个地方:
1. 默认配置,来自~HOME/.screenrc和/usr/local/etc/screenrc文件
2. 通过指定配置文件获取配置: screen -c xxx
3. screen运行过程中通过colon交互式修改配置文件

缺省screen配置:
C-a ': 选择screen窗口,输入数字,回车确认
C-a ": 出现窗口列表,回车选择
C-a 0..9-: 选择0~9号窗口,或者-窗口
C-a c或者C-a C-a: 创建窗口
C-a d或者C-a C-d: detach screen
C-a k或者C-a C-k: kill current window
C-a n或者C-a C-n: switch to next window
C-a N: switch to window N, N is window index
C-a p或者C-a C-p: switch to previous window
C-a t或者C-a C-t: show load average and xref
C-a w或者C-a C-w: show windows list,等同于C-a "
C-a ?: show key bindings
C-a [: enter copy mode,空格键开始选择内容,再次空格选择完毕
C-a ]: paste,首先要进入insert模式


screen配置文件:
如果要想学习这部分内容,首先要能够看明白screen的各种命令选项,参考:http://www.gnu.org/software/screen/manual/screen.html#Command-Summary

配置文件参考:
#trun off the startup message                                                   
startup_message off                                                             
term linux                                                                      
                                                                                
defscrollback 40960                                                             
hardstatus alwayslastline                                                       
                                                                                
#terminal name                                                                  
shelltitle "$|bash"                                                             
                                                                                
#shutdown the noise                                                             
vbell off                                                                       
                                                                                
bind w windowlist -b                                                            
bind ^w windowlist -b                                                           
                                                                                
#initial apps to run                                                            
screen                                                                          
screen                                                                          
select 0                                                                        
                                                                                
escape ^aa

attrcolor u "-u B"                                                              
autodetach on                                                                   
                                                                                
#hardstatus string '%{= kG}[ %{G}%c:%s %{g}][%= %{= kw}%?%-Lw%?%{Y}%n*%f%t %{K}%?%+Lw%?%= %{kG}][ %{C}(F8)Screen (F9)Title (F10)Detach (F11)Prev (F12)Next %{kg}][%{kG} %l %Y/%m/%d %{kG}]'
hardstatus string '%{= kG}[ %{G}%c:%s %{g}][%= %{= kw}%?%-Lw%?%{Y}%n*%f%t %{K}%?%+Lw%?%= %{kG}][ %{C} %{kg}][%{kG} %l %Y/%m/%d %{kG}]'


小结一下吧:

screen的分屏给人很鸡肋的感觉,^a S后,通过^a tab切换,然后在用^a c创建新窗口。现在我的电脑还只支持横着分屏,但新版本的screen支持竖着分屏了。很多时候还是会用vim的分屏吧,而我,连vim的分屏都不喜欢用。

另外,默认的^a控制键跟shell的快捷键ctrl + a(光标一到命令最前面),所以在screen窗口中需要跑到命令最前面,需要输入ctrl + a + a。

还有个问题就是screen滚屏问题,比如有个窗口A正在输出日志,窗口B在编辑源代码,当你从窗口B切换到窗口A查看日志,并且想查看更老的日志时,你需要滚屏。默认情况下滚屏则出现了原来窗口B的内容,这是个巨大的不便利,虽然没研究其中的原因。但也有个曲线救国的方式,陷进去copy模式,然后往回滚:
1. ctl + a + [,
2. 通过所有的vim滚屏键滚动屏幕,比如ctrl+b

据说tmux已经甩screen几条街了,虽然有学过tmux,但也好久没用了。当时学的时候对tmux的分屏很有爱,哪天再过来记录一下~

猜你喜欢

转载自liaofeng-xiao.iteye.com/blog/1757267