远方有你,Emacs

远方有你,Emacs


世界上最远的距离,不是其他所有那些乱七糟的,而是因为一些软件必须用
windows机器,却需要用 emacs org-mode 记笔记和日志。因为有4个工作需要使
用windows,我试了几天各种方法记笔记,有种"够了"的感觉。


我试过在windows下装个emacs,用ftp什么的同步笔记,担心万一同时用两台机器
的时候把两边的笔记分别改了;有人提到用云,我担心哪天发布出去了……最后决
定,从windows远程登录Linux. 就像在本地工作一样,当又看到熟悉的Emacs界面
-好吧,我承认,那就像没有界面一样-我才感觉工作又顺畅起来。


1. ssh,从windows连接到Linux


很久以前远程管理Linux的时候,我们都是用telnet,这也是互联网基本服务之
一。telnet明文传送,由于安全性的原因,ssh (Secure Shell Protocol)逐渐
流行并且变成了标配。


服务端,在Linux一侧,我用的是Ubuntu,安装 ssh server。在GUI界面或dpkg
都可以,略。


客户端,我考虑了putty和SecureCRT。putty是免费的,据评论功能上有个
别,SecureCRT收费。我只使用非常有限的功能,选了putty。我还考虑过用
xwindows,但是考虑到可能更复杂,而且我也并不常在GUI下工作,算了。


putty的配置,我只改了一处:remote character set。默认是 use font
encoding,我改成了 utf-8。因为我的windows是gb2312,Linux是utf-8。


这样,远程登录,ssh正常工作了。如果用vi,现在已经行了。


全屏之下,看起来身临其境一般。


: login as: young
: young@192.168.1.166's password:
: Linux young-laptop 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13
: 19:40:53 UTC 2011                                             i686
: GNU/Linux
: Ubuntu 10.04.3 LTS


: Welcome to Ubuntu!
:  * Documentation:  https://help.ubuntu.com/


: 多少个 packages can be updated.
: 多少个 updates are security updates.


: New release 'precise' available.
: Run 'do-release-upgrade' to upgrade to it.


: Last login: Fri Sep 14 20:52:29 2012 from 192.168.1.150
: young@young-laptop:~$ 


2. tmux, 增强的终端


我们把在服务器的键盘上操作称为 console,翻译成控制台;在通过串口 (还有
后来的telnet)远程登录,称作终端。终端是原始的系统管理员操作Unix的手段。
因为其原始,所以后来有了一些增加的工具。


比如gnu有个screen,后来又出了一个tmux,就是专门增加终端体验的。我装
tmux的原因是,希望下次登录的时候能够还看到上次的运行状态,并且懒得为远
程登录单独创造环境变量什么的。


tmux支持session功能。离线之前 detach,再连线的时候 attach 到上次的
session中。用起来挺方便。


tmux还默认支持一个有用的功能:两个人都 attach 到同一个 session 中,可
以看到对方输入的内容。这个用来演示Unix系统管理和编程,是个不错的方法。
比 teamview 或 windows远程桌面 之类更好的地方在于 极低的带宽需求。


没错,QQ也有远程协助的功能。但是我本人不用QQ,所以也不太清楚用起来是什
么感觉。不过,当我最开始知道有的年轻一代为如果没有QQ就没办法截屏的时
候,我非常地震惊。基本工具的使用,已经沦落到这种程度了么。按键
Alt+PrtScreen就可以截当前窗口,PrtScreen可以截当前全屏,截完的结果在剪
贴板里,可以贴到word或画图中,这种技术就是著名的...


80还是90后们说的一个词完美的描述了我的心情:无语。


tmux还支持把屏幕划分为几个pane,还能简单改下布局。不过,我本来就看不清
楚,希望窗口能大一些,这功能试了下就不用了。向眼神好的同学推荐。


我改了呼出tmux的快捷键,默认的是C-b,在emacs中是前一个字符,另一个候
选,也就是更老的screen的快捷键是C-a,在emacs中是当前行首。我改成了
Ctrl-o,默认是插入新行,我通常用回车代替。




: ~ $ cat .tmux.conf 
: set -g prefix "C-o"
: unbind C-b
: bind "C-o" send-prefix


3. emacsclient -t


emacs启动比vim慢多了,所以经常被嘲笑。PDP-11启动也挺慢的,坦克也是,非
瑞士军刀类的工具大抵如此。为了应对吧,Emacs有个快速启动的方
法,emacsclient. 需要在emacs上安装插件,具体的步骤网上很多,我不废话
了,参见 google emacsclient 或
[http://www.emacswiki.org/emacs/EmacsClient].


emacs这种老派作风的软件,不仅考虑到了启动速度,还为同样老派的终端非GUI
提供支持。emacsclient -t 参数就是专为老一辈没有GUI的穷人设计的。很好
用,基本跟用GUI的差不多,因为我用GUI的时候也基本都是文字。


每次工作完准备睡觉的时候,在emacs中Ctrl-o呼出tmux (此处系统没有任何表
现),然后按d,执行detach session。然后putty和ssh退不退都没关系。下次工
作的时候,运行putty,ssh连接到Linux机器,然后tmux a,emacsclient就仍然
在上次的位置,已经进入了emacs里。


当然,还需要远程Linux的一个配合,emacsclient需要emacs已经运行了才行。而
我的Linux里的emacs是从来不会退出的。


4. 全键盘支持


emacs使用的时候手基本不用离开基本键,绝无必要离开键盘去够鼠标。同时,
这也需要很多快键捷,而有些快捷键用到了putty或者说终端默认不支持的。


比如说F1,F12,home,end,delete这些。严格的说,它们不是不被支持,而是早期
的规范没有统一,很多终端对于这些键的处理是不同的。还没有等到天下统一,
终端就已经开始退出主流了。


第一步:terminal->keyboard->the functin keys and keyboard,设置为
sco. 这个功能看来不太常用,手册上甚至说,你要是看不懂,那就是你用不着瞎
鼓捣 (原文是:If you don't know what any of this means, you probably
don't need to fiddle with it.  )。


这一招我是从emacswiki上学来的。那位牛人给出了所有的功能键在sco终端上对
应的字符序列,同时指出,putty只有sco类型终端才支持所有的功能键。


所以,
第二步:我的.emacs文件里多了些下面这样的内容:


: (define-key input-decode-map "\e[H" [home])
: (define-key input-decode-map "\e[X" [f12])


还有很多,我没有抄下来,都是是对每个功能键和编辑键的定义。上述的牛人列
出了全部,请参见[http://emacswiki.org/emacs/PuTTY#toc].


其中的"\e[H"是最有意思的一段。它就是当你按下home键时,终端接收到的东西。
不是某个单一的键盘"扫描码",而是经过转义的字符序列。其中"\e"在这里就是
Alt键。即,当home按下,终端接收到的是 Alt [ 同时按下,然后是一个单独的
H。


很巧妙。


不过这个巧妙的道理给我带来了些麻烦。因为序列的第一个字符是 Alt [,而这
个字符在我这里已经被映射成了插入包围选中文字的[]序列,所以无论是用
emacs describe-key,还是在命令行提示符下用 C-v ,还是 cat -v,所有这些
显示我按下的按键序列的方法,都显示出一对方括号,而且看不到Alt。所以,
一连几天都没有捕捉到功能键按下。


后来,我想起来emacs中伟大的帮助。M-x help l。顺便说一句,如果你不知道这
是什么,十有八九你不用不到这个功能。然后我看到了home对应的按键。


剩下的就一目了然了。我禁用了对左中括号的补全,然后终端认识了所有的功能
键。




对了,在功能键不好使用的时候,我已经开始嗑嗑拌拌地远程使用了emacs
org-mode了,用下面这段,是改变笔记里标题级别的:


: (global-set-key (kbd "ESC <right>") 'org-do-demote)
: (global-set-key (kbd "ESC <left>") 'org-do-promote)
: (global-set-key (kbd "ESC <up>"  ) 'org-move-subtree-up)
: (global-set-key (kbd "ESC <down>") 'org-move-subtree-down)


即使并不在同一台机器之中,我知道Emacs一直守候,它始终触手可及。远方有
你,心即安定。


--------------------


博客会手工同步到以下地址:


[http://giftdotyoung.blogspot.com]


[http://blog.csdn.net/younggift]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值