致Emacs初学者+Emacs初学者必知必会

原文链接:http://emacser.com/to-emacs-beginner.htm

需要专门花时间去学的软件为数不多, Emacs正是其中之一. 我周围的好多人在我的”鼓吹”下, 也对Emacs感兴趣起来, 可是不过好久, 就放弃了, 究其原因, 我想是他们对Emacs的认识不够, 或者是学习方法不正确. 在这里, 我想说一下Emacs初学者应该注意的一些问题.

Emacs是什么

首先, 我想你应该要知道Emacs是什么, 不知道的同志请看这里.

为啥要学Emacs

  • 赶时髦
    那我劝你还是别学了, 学Emacs可赶不起时髦, 用Emacs的人可少了. 我呆过的三个公司, 都是在linux下做开发的, 但每个公司都只有2,3个人用. 我一个同事告诉我, 他认识的人中只有我一个人用Emacs. 而且你不但赶不起时髦, 还很有可能被人”鄙视”. 我曾经向一位朋友推荐Emacs, 说Emacs是一款非常强大的工具. 他使用了后, 告诉我, Emacs太土了, 删之. 看来从古到今, 相貌永远起着不小的作用. 我还有一个同事, 问我用什么工具开发, 我说用Emacs, 他说, 太土了, 远古时期的工具, 用Eclipse吧. 我当时只有一种感觉, 我比窦娥还冤. 本曾想他夸我一句, “You are cool!”, 没曾想, …, 伤心往事.
  • 装酷
    嗯, 首先得承认在这个大环境中, 用Emacs确实很酷. 在这个菜单很少, 鼠标动作很少, 没有漂亮的界面, 只有一个黑乎乎的文本框的软件里, 完全用键盘操作, 多酷多拉风啊. 可是, 酷虽酷, 可不是一时半会能学会的, 得花时间去学, 得有毅力, 如果你没有这个毅力的话, 就此打住.
  • 想在特定语言的功能方面超过特定IDE
    比如, 你想在java语言方面, 针对java的特有的功能这一方面, 你想使用Emacs超过Eclipse, 那Emacs不太适合你. Emacs的年龄很大, 比我们这些年轻人的年龄都要大, 好多高级功能, 比如Eclipse的代码重构, 它就没有. 一般IDE都有的代码补全, 代码浏览, Emacs在这方面也做的不是很好, 当然这些方面, 都会有的, 因为Emacs的扩展性实在是太强大了, 任何人都可以扩展它, 那些功能只要用户需求大, 最终会有人写的. 既然这样, 那么Emacs的强项到底在哪里呢?

Emacs的强项

  • 无限的定制性
    萝卜青菜, 各有所爱. 人与人之间的习惯差别太大了. 一款工具怎么能适用所有人? 那可定制性是必不可少了. Emacs在这方面做的非常出色. 你可以对任何选项进行定制, 你可以定制任何按键, 你可以。。。.
  • 无限的扩展性
    如果你使用了一款扩展性不强的软件, 如果没有别的软件中某个特别好用的功能, 那么你只有期望软件作者能为你开发这一功能了. 如果用户都希望有这个功能的话, 也许你不用等多久作者就为用户开发了那个功能了. 但是如果只是一个你觉得好用的功能呢? 那怎么办? 恐怕作者不大可能为某个特定用户开发特定的功能. 这时候, 扩展性显得多么重要. Emacs在这方面也做的非常出色. 它以强大的Elisp语言作为扩展语言, 扩展性远远超过几乎任何一款软件(包括vim).

Emacs适合哪些人

  • 有区别于别人的使用习惯, 有一些自己的, 软件作者不会帮你实现的需求的人
  • 喜欢追求高效率操作的人. 如果你喜欢用鼠标点来点去, 如果你喜欢按那些难用的功能键, 那就不用再看了, Emacs不太适合你.
  • 喜欢折腾的人. 用Emacs是需要折腾精神的, 如果你是一个懒人, 不太想折腾, 恐怕Emacs不适合你, 想用Emacs不折腾, 不大可能.

在什么操作系统下使用Emacs

Emacs支持众多的操作系统, Windows也在其中, 但是如果想发挥Emacs的巨大威力的话, 建议你还是不要在Windows下使用Emacs, 说的不好听点, 在Windows下使用Emacs一是折磨你自己, 二是糟蹋Emacs, 因为Emacs用到好多第三方的工具, 比如w3m, 在*nix下安装都非常方便, 在Windows下都比较麻烦, 而且有的工具干脆就没有Windows版本. 我见到好多Emacs的初学者, 由于不熟练*nix, 选择在Windows下折腾Emacs, 什么HOME问题, 什么字体问题啊, 简直就是折腾不完的问题. 要是真的想学好Emacs的话, 必须要学好*nix, 而且这么好的操作系统, 熟练使用它也是一件幸事.

从哪开始

如果你能通过上面几条, 恭喜你, 你可以开始你的Emacs之旅了.
那么到底怎么学习Emacs呢? 我觉得刚开始学习Emacs的时候, 应该先了解一下Emacs的一些基本概念和基本知识(毕竟Emacs和其他的IDE的一些概念和理念是不同的), 比如, Emacs的buffer, window, frame, mode, Isearch. 知道这些最基础的概念之后, 应该再学习一下最基本的定制知识, 比如绑定快捷键啊, 定制选项啊, 还有看文档的方法, Emacs中的文档有函数自己的文档, 还有强大的info系统. 关于这些基础知识, 我推荐你去看《学习GNU Emacs》(中文版, 英文版)这本书, 非常适合初学者. 不过如果你想要快速入门的话, 可以看Emacs快速指南, 打开Emacs后, 按C-h t即可, 这是Emacs内置的文档, 有中文版. 笔者还写过一篇介绍这方面基础知识的文章, Emacs初学者必知必会, 感兴趣的读者也可去看看.

Emacs的考验

你现在是不是有点不想学Emacs了? 为啥?

  • 按键难按
    太冤枉Emacs了, Emacs的按键是最好按的, 你最好先把你的Control键和Caps lock键交换一下。
    最常用的是两个键的按键, 分别为Control和Alt键开头的, 其次是四个按键中的有两个按键为Control键的, 为啥四个按键比三个按键还好按? 比如C-x C-c, 这个是Emacs的退出键, 当你按C-x C-c的时候, 不需要先按C-x, 然后手拿起来, 再按C-c, 这样按当然难按, 你应该在按完C-x后, 按Control键的那个手指不需要厉离开 只需要用另外一个手指去按c就行了, 是不是只相当于按了三个按键? 你现在试试, 是不是更好按了些? 你再多试几次, 是不是非常方便? 是不是比两个键的按键差不到哪去?
    Emacs的按键设置的非常合理,默认的按键离键盘中心都很近,手指基本不需要离开键盘区,比windows下的按键不知道要好按多少倍,windows下的快捷键基本都是Control,Shift,功能键组合,须不知功能键离键盘中心那么远,多难按阿。
    个人觉得Emacs的按键也比vim的按键设置的合理,虽然vim的按键非常短,但是都是特别难按。比如回到行尾的$,回到第一个非空白字符的^,还有删除一个单词dw,试想阿,你如果想删除一系列单词怎么办?难道先要数数要删除多少个单词?然后用dNw?太慢了。要么就dw,dw,dw,。。。,按N次,这样就需要按2N次键,但是在Emacs下删除一个单词是M-d,你只需要按着Alt键一直不放,然后不停的按d就可以了,仅需要按N+1次键,方便之极。诸如此类的还有很多。所以如果你仅因为vim按键比较短,而转去学vim的话,趁早回头是岸吧,不要被短的按键迷惑了。我一个同事就这样被我从vim阵营拉过来了,:)
    其实上面所说的vim按键的那个问题, 可以通过”.”来完美的解决. 但是其他的问题, 可能就稍微麻烦了点, 比如vim编辑的时候要不停的在编辑模式和命令模式来回切换, 当然可以通过映射来做到不切换, 但是映射的键太多, 而且映射完, 按键也基本和Emacs的差不多了, 
  • 平时工作太忙, 没时间学, 以后有空再学
    别再有这种想法了, 你会永远没空. 明日复明日, 明日何其多啊. 你什么时候工作会闲下来? 公司辞退你的时候吗? 我认识中的人中, 好多人一开始都对Emacs挺感兴趣的, 最后都是因为没时间, 与Emacs无缘. 现在的人, 有哪个不忙? 时间就像***(此处已被宇宙第一帝国FFF工程抹去数字,详情请致电FFF工程总部热线444-54545444), 挤挤总会有的. 要是真想学Emacs的话, 要加班去学Emacs. 等了解完Emacs的基本概念和基础知识后, 要在工作中去用Emacs, 不用Emacs你永远也学不会Emacs. 在用的过程中, 碰到问题, 晚上再继续学. 长此以往, 岂有不熟之理. 我都是靠晚上加班来学Emacs的.

如果你真的想学Emacs的话, 不要再找借口了. 一失足成千古恨, 再回首已百年身啊. 趁年轻喜欢折腾, 多折腾折腾, 不要等到老来少年之狂已成往事之时, 追悔莫及啊. 我以前的一个同事,他以前的公司同事都用vim,所以也用vim,自从我向他介绍了Emacs后,开始学Emacs,一开始也没觉得好用,但是他坚持下来了,越用越好用,最终觉得Emacs太好用了。他是第一个我传道Emacs成功的对象,:)。
其实学习Emacs是有捷径的,那就是天天用。一定要坚持用,不要说你工作中用不到Emacs,不可能,Emacs啥都能干,开发,文本编辑,日程安排,收发邮件等等,你说你会用不到?你这些都还没熟悉?没关系,边学边用就是了,坚持下去,你就会发现用的越来越顺手,越来越喜欢用,这时候你就成功了。

Emacs进阶

当你掌握了上述的基本概念和基础知识后, 恭喜你, 你将开始初学者的第二个阶段.
接下来, 你可以去网上找一些牛人的配置来看看, 比如王垠(清华的退学博士, 很佩服), 叶文斌(他的主页不在了, 我备份了一份), 王纯业(他的主页也不在了), pluskid(浙大的牛人, yasnippet的作者). 我刚开始学Emacs的时候, 基本上也是看他们的配置. 看到别人的配置中比较有意思的地方, 你再拷贝到你的配置中, 这样看多了, 你就慢慢熟悉Emacs了. 但是我建议不要直接拿别人的配置文件来使用, 毕竟别人的配置是别人的, 它包括了别人的使用习惯, 不一定适合你. 我的配置中就改了一些Emacs基本的快捷键, 比如`C-k’我改成了删除一行, 而不是删除光标到行尾, 这也许不适合你. 当然我对于那些尽量能提供给别人的配置我是单独拿出来做成一个包的, 比如我的颜色主题color-theme-ahei, 还有dired-lis(这是一个使得你在dired中直接输入字母跳到对应文件的包, 就像Total Commander中那样, 非常的好用). 你可以去直接使用这些包, 再经过你自己的配置, 就为你所用了.
初学者在配置Emacs的过程中, 我相信经常会遇到加了某个配置后, 以前某个能用的功能现在不能用了, 不用着急, 我有三条妙计为你排忧解难:

  • 当你的配置出现问题时, 在Emacs启动命令后增加参数”–debug-init”, 这样启动后, 如果配置出错, Emacs会报出具体出错的位置, 这样你就可以很容易定位问题了.

  • 上述加参数的方法, 只适用于你的配置使得Emacs启动出现错误, 但是如果Emacs启动没有出现错误, 但是你需要的某个功能就是不能正常使用该怎么办呢? 很简单, 把你的配置用版本控制工具管理起来, 我的配置DEA就用svn管理起来, 记住, 用版本控制工具的时候, 一定要记得写日志, 方便以后出问题的时候, 容易找出问题, 我接触的人中, 好多人都没有写日志的习惯. 当你现在的版本出现问题时, 你可以看看以前的版本有没有问题, 找到一个没有问题的版本, 然后再用现在的版本和以前的版本比较一下, 看是修改了哪些配置, 然后再在这些配置上集中找问题.
  • 如果你嫌版本控制麻烦, 或者出问题的版本和不出问题的版本之间的差别很大的话, 还有一种方法. 排除法! 即不管你有多少条配置语句, 我一个一个的排除, 我先去掉第一条语句, 看有没有问题了, 没有啦? 恭喜你啦, 你试一次就试出来了. 还有? 也不用担心, 继续试. 你是不是觉得我这个方法似乎太傻了, 对于几行的配置文件, 这样是管用, 那么对于几百行, 甚至上千行的配置文件怎么办? 一个一个的排除? 太慢了吧? 别急, 我有二分调试法为你降妖附魔.

    二分调试法

    什么是二分调试法? 名字很酷吧? 我自己取的,  二分调试法首先本质上也是排除法, 其次, 二分嘛, 肯定与二分搜索有关系嘛, 对头, 它就是利用了二分搜索法的算法思想. 假如对于64行的配置文件, 现在出现某个问题了, 我首先把后面32行注释掉(用(when nil)注释, 方便快捷), 看看有没有问题:

    1. 没问题? 太好了, 那问题肯定是出在33行到64行之间, 继续二分, 把刚才的注释取消掉, 把48行到64行之间的代码注释掉, 继续判断.
    2. 有问题? 同样太好了, 那问题肯定是出在1到32行之间, 继续二分, 把刚才的注释取消掉, 把16行到32行之间的代码注释掉, 继续判断.

    经过以上递归判断, 最终肯定能找到问题所在. 好多问题我都是靠这种方法解决的.

    二分调试法效率如何

    二分二分嘛, 当然也和二分搜索法效率一样的了, 复杂度lgN, 所以甭管多大的配置文件, 二分调试法一会就能帮你找到问题所在. 100万行?哇,好大,20次搞定!算法的威力强大吧?!

    适用于其他语言吗?

    当然适用

    注意事项

    你不会傻的真的完全二分吧? 二分的时候对于代码块, 比如for, while等要放在一起, 不能分开.

成为Emacs高手

经过上述的锻炼, 我相信你现在应该可以熟练的使用Emacs了. 但是还不够, 为什么还不够?

  • 遇到问题怎么办
    除了Google, 或者向别人请教之外, 能不能自己来解决?
  • 想要实现一些Emacs没有的功能

这就需要你懂Elisp语言了.
学Elisp主要是看文档(废话), 一个是Emacs函数的自文档(M-x describe-function, 默认按键绑定是C-h f), 还有更强大的就是Elisp的info. 英文不好的同志(其实Emacs函数的自文档和info的英文都很简单)可以看看叶文斌的elisp教程,《GNU Emacs Lisp编程入门中文版》. 刚开始学Elisp的时候, 可以先看看上面的2个中文教程, 系统了解一下Elisp, 看了差不多后, 可以开始看看Emacs函数的自文档, 自文档非常的方便, 可以在看代码的时候, 随时遇到不懂的函数随时查看文档. 我写了两个查看Elisp自文档和代码非常方便的包, find-symbol, describe-symbol, 看Emacs的代码和别的插件的代码也是一个非常好的学习Elisp的方法,有兴趣的同志可以试试. 等到自文档看的比较熟练后, 可以看info了, info写的非常详细. 当然, 以上过程, 并不一定要循序渐进, 你也可以在看自文档的同时, 看看info.

高手之后

哈, 为Emacser们多写点方便实用的Elisp包吧!

Emacs学习方法总结

  • 天天用 太重要了
  • 多看文档,包括Emacs的自文档和info,info有Emacs的info和Elisp的info,info非常非常之详细,想要学好Emacs必须要看的,不要怕英文,我的英文也不好,经常看就明白了,而且还锻炼了自己的英文,还有自文档和info的英文真的是很简单。


Emacs初学者必知必会

自己学习Emacs已3年由余, 对Emacs也算有点经验. 随着对Emacs的了解的不断深入, 越来越觉得Emacs是一款非常值得学习的软件. 所以我经常向自己的朋友推荐Emacs. 自己也认识一些Emacs初学者. 从他们经常问的一些问题中感觉, 好多初学者都没有好好的学过Emacs, 也有可能是Emacs的资料不是很多, 好资料更少, 他们没有找到好的学习方法吧. 所以, 我想就我所了解的, 写一些初学者应该知道的东西, 或者说, 初学者掌握了这些知识和方法后, 学习Emacs起来更加容易吧. 另外, 初学者如果有兴趣的话, 可以看看本人另外一篇拙作 《致Emacs初学者》 , 希望能对你们有所帮助.
原文链接:http://emacser.com/emacs-beginner-must-know.htm

知道Emacs的基本概念


  • buffer
    缓冲区. Emacs并不直接对文件进行操作, 它是把文件加载进buffer, 用户直接操作buffer, 只有当用户确定把buffer中所做的修改写人文件时, Emacs才把buffer中的内容写入文件. buffer实际上就是一个内存缓冲区, 这和一般编辑器中都一样, 应该很好理解.
  • window
    窗口. 由于Emacs很早就诞生了, 它的窗口概念和现在基于窗口的操作系统中的窗口概念不是一样的. Emacs中的窗口是用来显示buffer的一个区域. 它并不像操作系统中的窗口拥有自己的标题栏,系统菜单栏.
  • frame
    Emacs中的frame就是操作系统中的窗口.

buffer是文件的内存表示, windows则是显示buffer的区域, 一个frame中可以有多个window, Emacs则可以有多个frame.

  • Emacs Lisp
    Emacs最基础的部分是用c写的,其他部分都是用Emacs Lisp语言写的,Emacs Lisp语言是基于lisp语言的. lisp是LISt Processor的缩写, 即链表处理语言, 所以lisp语言的操作都是基于链表的, 它的语法也是链表结构, 链表第一个元素表示函数名, 其他元素是参数, 比如通常语言中的a+b, 在lisp就是(+ a b)
  • mode
    mode有major mode和minor mode之分, 每个缓冲区对应一个major mode, 也只有一个major mode, 但是可以有多个minor mode. Emacs对每一种文件都有一个mode.
  • 命令
    你对Emacs所有的操作都是对Emacs的命令的调用。比如,你在text-mode里,当你按下任何字母键进行编辑的时候,实际上是调用的emacs的命令self-insert-command.
  • 快捷键
    Emacs中Control键用C表示,Alt键用M表示, 即: C-c表示Control C, M-x表示Alt x.
    除掉以Alt键开头的,比如Alt a,Emacs中的快捷键基本上都有一个前缀,Emacs中最多的快捷键前缀就是C-x,C-c,前缀表示,你不必要一起按下前缀和后缀,可以先按下前缀,Emacs会等待你按下剩余的快捷键,这样Emacs中的快捷键按起来非常的方便。
  • keymap
    键盘映射. Emacs的快捷键是通过keymap来控制的. 有全局和局部的keymap. 每个mode都会有一个自己的局部的keymap, 局部的keymap会覆盖全局的keymap, 另外如果对应的major mode有开启的minor mode, 而且这个minor mode有keymap的话, 这个minor mode的keymap会覆盖major mode的keymap.

学会看文档

Emacs的文档非常丰富, 有Elisp自己的自文档, 还有更详细的info. Elisp中的变量, 函数都有文档. 对于大多数情况都够用了.

  • 查看变量的值和文档
    C-h v (describe-variable)
  • 查看函数的文档
    C-h f (describe-function)
  • 查看face的文档
    M-x describe-face
  • 查看某个mode的文档
    C-h m (describe-mode)
    刚开始学习某个mode的时候, 可以用C-h m看看当前buffer对应的主mode和副mode的文档, 这个文档一般都会包括mode中的命令和快捷键列表.
  • 查看某个快捷键对应的命令
    C-h k (describe-key)
  • 查看某个命令对应的快捷键
    C-h w (where-is)
  • 查看当前buffer所有的快捷键列表
    C-h b (describe-bindings)
  • 查看当前buffer中以某个快捷键序列开头的快捷键列表
    <待查看的快捷键序列> C-h,比如你想查看当前buffer中所有以C-c开头的快捷键列表,按C-c C-h就可以了。
  • 查看函数的代码
    find-function
  • 查看变量的代码
    find-variable
  • 查看face的代码
    find-face-definition
  • M-x apropos
    查看包含某个关键词的函数,变量,face

会些简单的配置

  • 执行Elisp代码
    1. 在某条语句后面按C-x C-e (eval-last-sexp)可以执行那条语句
    2. M-x eval-buffer 可以执行当前buffer内的Elisp代码
    3. 选中一个region后, M-x eval-region可以执行这个region内的代码
  • 安装插件
    Emacs的插件一般都是一个以el为后缀名的文件, 把这个文件下载下来后放到一个目录, 比如~/emacs/lisps, 然后执行下面这两条语句:

    ? View Code LISP
    1
    2
    
    (add-to-list 'load-path "~/emacs/lisps")
    (require 'pluginname)
  • 快捷键定制
    全局绑定global-set-key, 绑定某个mode的快捷键用define-key. global-set-key的定义为:

    ? View Code LISP
    (global-set-key key command)

    比如想把C-j绑定到”到达指定行上”(goto-line), 这样就可以了:

    ? View Code LISP
    (global-set-key (kbd "C-j") 'goto-line)

    kbd是Emacs的宏, 把快捷键转换为Emacs的内部按键表示. 然后执行上面那条语句, 就会使你的配置生效. 然后你可以用C-h k检查一下你的定制是否成功了.
    如果对于比较复杂的快捷键, 比如Control x F3, 改怎么写呢? 按C-h k(describe-key), 然后再按下Control x F3, Emacs会出现一个”C-x “, 这个就是你要写到kbd宏里面的内容.
    如果你想对某个特定模式比如c++-mode进行快捷键定制, 用define-key即可, 对于上面的例子这样写:

    ? View Code LISP
    (define-key c++-mode-map (kbd "C-j") 'goto-line)

    define-key第一个参数map一般为mode后面直接加”-map”

  • 简单的颜色定制
    ? View Code LISP
    1
    2
    3
    4
    5
    
    (set-background-color "black") ;; 使用黑色背景
    (set-foreground-color "white") ;; 使用白色前景
     
    (set-face-foreground 'region "red")  ;; 区域前景颜色设为红色
    (set-face-background 'region "blue") ;; 区域背景色设为蓝色


附1:Control键和Caps lock键交换


原文链接: http://emacser.com/capslock.htm

前阵子,无意中在网上发现一篇文章Effective Emacs中文版,第一条就是说把Caps-Lock和Control键互换,作者是这样说的:

? View Code TEXT
1
2
3
4
5
条款1:把Caps-Lock和Control键互换!
 
在Windows和苹果Mac键盘上,那个Ctrl键居然被远远地放在左下角,而Ctrl对于emacs的使用却是时时刻刻都很重要的,
如果你不把Ctrl放到一个更舒服的位置,你就很难成一个emacs艺术大师了。这位置应该与你的基本手位处于同一行,
那么,Caps Lock是最佳选择。在很多unix工作站上,这个位置放的就是Ctrl键,原因同上。

我觉得说的挺有道理的,于是乎,赶紧照着说明把caps lock键和右ctrl键交换过来了,右ctrl键使用的更少,你还可以把caps lock键和右ctrl键旁边的那个右键菜单键,那个键使用的更不频繁。交换方法如下:(以下方法是交换caps lock键和左ctrl键)

? View Code TEXT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
要想在w2000或者XP中实现这个互换,需要修改注册表。从开始菜单中选择“运行”,输入regedit。在左边的树状视图中,找到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
点击 KeyboardLayout 项,使之获得焦点。再从“编辑”菜单中选择新建一个二进制值,命名为 "Scancode Map",它的类型应该显示为 REG_BINARY。
然后选择这个新建的"Scancode Map"值项,用“编辑”菜单中选择修改二进制值,在二进制编辑对话框中,输入下列数据:
 0000: 00 00 00 00 00 00 00 00
 0008: 03 00 00 00 3A 00 1D 00
 0010: 1D 00 3A 00 00 00 00 00
 
选择OK关闭对话框,退出注册表编辑器,注销后重登入,你的caps和ctrl键应该就互换成功了。也可能要重启一次。
 
在linux的X-Window中,可以使用xmodmap工具。在你的主目录新建一个名字为.xmodmap的文件,如果已经存在则只需修改。向该文件加入下列内容:
 !
 ! Swap Caps_Lock and Control_L
 !
 remove Lock = Caps_Lock
 remove Control = Control_L
 keysym Control_L = Caps_Lock
 keysym Caps_Lock = Control_L
 add Lock = Caps_Lock
 add Control = Control_L
保存,再向你的 /etc/rc.local 文件加入一行:
xmodmap ~/.xmodmap 2>/dev/null
 
在Mac OS X(Panther或Jaguar)中,你得安装一个修改过的键盘驱动,这说来有些吓人,但是很有效。
这儿有个关于驱动的讨论:
http://www.macosxhints.com/article.php?story=20031102032521826
如果你用的不是Mac笔记本,好像有一个XML文件可以编辑来实现,可以参考这儿:
http://www.eecs.wsu.edu/%7Eschneidj/mac-os-x-10.3.html#swap
下面的URL有一条关于在其它系统上实现的信息:
http://www.manicai.net/comp/swap-caps-ctrl.html

windows用户还可以去这里看看一些比较好用交换按键的软件, 使用极其简单.

刚开始的时候特别不习惯,因为要用左小拇指来按那个caps lock键,而左小拇指不太容易用力,其中比较难按的键有Ctrl+A,Ctrl+S,Ctrl+Q,Ctrl+Z,主要是那些与caps lock键离的很近的键,不过天将降大任于斯人也,必先苦其心志阿,我经过几天的折磨我的左小拇指,终于能非常熟练的把caps lock键当ctrl键使了,确实方便多了,敲caps lock键的时候,手根本不需要离开键盘区域,特别方便,我现在到别人的机器上,去按Ctrl键,感觉好不习惯,明显觉得Ctrl键比caps lock键难按多了,:)当然, 并不是只有用emacs才需要交换这两个键, 不用emacs的话当然也可以交换, 毕竟快捷键基本上都是以Ctrl键开头的.


你可能感兴趣的:(耶!Linux)