有句话叫做“工欲善其事,必先利其器”。Programmers对这句话体会最深了。假设一下在某某时候没有什么而只能用什么,我们就会发现,很多时候因为有一个好的工具我们的工作事半功倍、我们的困难迎刃而解。因此我们收集好的工具,彼此推荐自己使用的工具,也会因为发现一个好的工具如获至宝。更有牛人制作出好的工具供他人享用。现在我要说的是怎么把两个好工具结合起来。

一、screen:linux上管理远程会话的一个工具

(1)为什么使用screen

1、我们往往通过SSH或者telent登录到linux服务器上进行工作,如果一项工作需要独自运行很长时间,我们必须等到任务执行完毕才能关掉终端窗口或者断开连接,否则任务进程会被杀掉。使用screen,你不必担心这个问题,关闭窗口,甚至你和服务器的连接突然断了,只要服务器没挂,当你重新连接上服务器,
attach上你原来的screen,你会发现:everything is here, 并且和你断开连接时一样。

2、我们操作一台服务器的时候很可能要做多项工作,比如起个服务,运行几个测试客户端,同时还想监控一下各个进程的日志,这样我们就必须同时打开几个远程终端窗口,并在之间来回切换,痛苦可想而知。使用screen,它会把你从这种痛苦中解救出来。screen可以打开多个screen子窗口,更让人欣喜的是它还能给各个子窗口命名,通过快捷键你就可以快速地在各个子窗口中切换,那种感觉确实很爽。

(2)screen的配置

在你的home目录下创建.screenrc配置文件,创建screen时会自动执行此文件的配置。
hardstatus alwayslastline "%{=b}%{G} Screen(s): %{b}%w %=%{kG}%C%A  %D, %M/%d/%Y " 
这句配置语句可让你的screen在终端窗口下方显示各个子窗口名,并且显示系统时间。后面说screen和emacs的结合使用时也会讲到一些配置。

 

更多的screen介绍可在linux系统中查看帮助。

 

 


二、Emacs

     非常强大的一工具,有人说使用emacs的人恨不得电脑能安装两个脚踏板,这说明它丰富的快捷键以及众多的功能。对于emacs,我也仅限于够用,还在进一步的探索中。只是感觉在其中进行编译、调试会方便很多,它会自动定位编译错误,单步执行的时候会像vs一样看到执行到的语句,显示堆栈,断点信息,当然编辑也很快速。
更多的介绍可参考http://emacser.com/。

 

 

 

 

三、Screen和Emacs的结合

   因为Screen和Emacs都是靠快捷键工作的,众多的快捷键难免会产生冲突,不解决这些冲突这两个工具就没法一块用,那将是多么痛苦的一件事。

 

1、C-a是screen的命令字符,它又是emacs中跳到行首的快捷键,幸运的是screen允许你重新设置自己的命令字符。
escape ^Zz #Instead of control-a
通过在.screenrc中添加这条配置语句, 我把screen的命令字符换成了C-z,emacs的快捷键实在是多,找个没有用的确实困难,这是我目前没发现用到过的一个快捷键。

2、C-s会导致莫名其妙的问题
C-s在Emacs里面是查找的快捷键,C-x C-s是保存文件的快捷键,它两都是会经常用到的。每次我同时使用这两个工具,按下其中一个快捷键的时候,窗口莫名奇妙地停在那了,再按其他键就没反应了,只好重新开窗口,attach上screen,小心谨慎地敲着快捷键,一不小心按上C-s了就麻烦了。这个问题困扰了我很长时间,终于有一天实在忍受不了了,查看了screen的文档才弄明白:screen是有流控制的,当流控制打开的时候,C-s暂停窗口的输出,但C-s不会发送到你的运行程序,你接下来的输入仍会发送到你的运行程序,如是就出现了我描述的莫名其妙的情况;当流控制关闭的时候,screen会忽略XON and XOFF,并把它们发送到运行程序,这才是我们期望的。这就需要在.screenrc配置文件中添加defflow off来关闭流控制。


这样我们就能同时使用这两个工具 了, 赶快享受它们带给我们的幸福吧!