这几天都没有动力写mongodb的东西,我果然还是太懒了么~ 主要是没有一个系统的东西整理出来,加上我令人拙计的语言表达能力,这个坑只能慢慢再补了.

最近在折腾emacs这个东西,首先说我曾经算是个极为坚定的VIM党,我在各种IDE里面基本都会要装VIM化的插件,而且我的浏览器Firefox一直有Vimperator这个插件,现在上网如果不能用d关网页/用t开tab就会觉得难受.那么我为啥还要搞emacs呢?而且眼看着sublime一天天变得流行起来,而emacs基本没什么新人在用,我为啥又在这个时候折腾emacs呢?

理由其实也不是很充分,但是对我而言已经够了:

  1. Emacs是用Lisp的最经典的程序了,作为试图成为Lisper的人,emacs最起码应该使用过.君不见github上最流行的lisp方言就是emacs lisp(虽然绝大部分repo都是大家把各自的emacs配置放上去了而已)
  2. Emacs是Hacker的选择,首先开发者RMS神不用说了(如果不知道这位的话建议不要用Emacs来进行工作,我现在觉得Emacs也确实是不太适合大众用的东西,只适合对于文本编辑效率极高的人群,最典型的就是码农),其次大量知名人士使用 著名Emacs用户列表 ,虽说并不是别人用什么你就改用什么,但至少你能确定这不是一个糟糕的选择.
  3. 最近写clojure,对于括号的操作很重要,而paredit让写lisp轻松了一些.
  4. 本人相对来说还是不是特别怕折腾的

(附Richard Matthew Stallman照片一张)

那么就开始折腾吧,之前对于emacs的复杂程度心里有所准备,所以知道这东西不会像sublime一样开箱就能用,果然第一个遇到的问题就是:怎么打开文件啊?

先镇定,我之前用vim的时候就是各种操作不会,都只能找菜单,这里一样先找菜单再说,然后发现选了打开文件以后是要输文件路径的(囧).估计光是这一点就足够赶走无数的用户,真是用户交互设计的一大败笔,不过emacs这东西就不是给普通用户设计的,只有接受它的设定,才能达到我们的目标:提高效率.

接下来学习的过程就不再叙述了,总之就是先Ctrl+h t看完了教程先,教程是英语的但是很好懂.然后就是一边开着手册一边试着编辑文件了.就和学习一门新语言一样,不断的写程序是最快能学会的方法.

别人的emacs是这样的                                                         我的emacs是这样的

防治小拇指抽搐

学习的历程还是很漫长的,尤其是在Vim的肌肉记忆深深植根大脑的时候,令人愤怒的是你会发现Emacs的键位比较奇葩,不是很好按,不像Vim有模式可以不用修饰键,Emacs里面需要大量的Ctrl Shift Alt等等,这就大大加深了小拇指的负担.有人建议装脚踏板给Ctrl和Alt,我觉得这方案还挺好的,可惜这需求太小众,万能的淘宝都找不到合适的踏板,有一种但是看上去不给力且价格不理想.

我这里建议把Capslock键改了,我之前使用Vim的时候是Capslock和ESC交换,现在则是Capslock直接改成Ctrl,因为capslock实在没有什么用.这样的话开vim的时候注意 Ctrl+[ 是和ESC起一样的作用的,这样就可以同时让Emac和Vim的按键都舒服许多.在Mac上还有点优势就是不需要装额外的软件就可以把键给改了.

站在巨人的肩膀上

既然emacs是是众所周知的难于配置,自然有拯救苍生的各位大大想让更多的菜鸟能用上神器.于是乎出现了不少文章帮助菜鸟度过难关,其实只要经常搜一下就会找到他们的博客,例如emacs中文网,李杀网等很多地方.另外还有些大大分享了他们的配置文件供我们上手快一些,我这里用的是emacs-starter-kit, 注意它的作者是leiningen的作者,非常值得借鉴.Emacs-starter-kit的github页面上有关于如何使用的说明.没有它的话天知道又有多少人会把光阴白白送在一些非常基础的设置之中了.

Package.el

以前的Emacs的插件管理方式非常的原始,都是直接把插件的el文件放在.emac.d文件夹下,并不区分插件和配置文件,这对于插件的管理/升级/卸载都十分的不便,后来就有了package.el插件来帮助设置插件.最后Emacs的作者们终于在Emacs的24版中内置了插件管理,为我们省却了很多功夫.在安装emacs-starter-kit的时候指南上就介绍我们要在init.el中写

 (require 'package)
(add-to-list 'package-archives
'("marmalade" . "http://marmalade-repo.org/packages/") t)
(package-initialize)

这里第一行是说加载package.el这个包,2~3行说为package.el中加入marmalade的源来获取包,第4行是初始化包.刚开始的时候不需要明白到底这些都是啥.只要不要随便就删掉它们就好了.

这些代码算是设置好了软件源,就跟我们在ubuntu上设apt-get的源一样.但是我在尝试sr-speedbar这个包的时候发现安装时会出一些问题,没有办法装上去,在github上找到了sr-speedbar的代码,发现由于兼容性问题在最近的2013年才被修正过,而marmalade上的版本是2009年的,就是说如果用marmalade的话就没有办法正确安装,我现在暂时还不会hack package中的代码(何况这样就失去了package打包安装的意义),尝试了一下byte-recompile等指令发现还是不太会,在即将放弃这个插件之际想到,如果有别的源说不定已经更新了,由此在emacs wiki上又找到了下面的配置

 (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")
("melpa" . "http://melpa.milkbox.net/packages/")))

用上面这3行取代前面的2~3行代码就可以了,其实意思就是将melpa这个源加入package的软件源而已.

加入Melpa这个源以后,运行list-packages这个指令时会发现显著变慢了,然后可以看到很多版本号都变成了日期,同时后面会有[github]等字样,这是什么意思呢?上melpa这个网站可以看到,它的原理和marmalade是不同的,它基于版本控制系统自动生成package,就是说只要作者将代码更新了commit以后,melpa就会更新,不需要再等作者打包放到marmalade上面,而且如果原作者早就忘了更新这个事的话还有其他人帮忙更新代码,这样显然是更好的方式,sr-speedbar就是这样做的.

所以当然立即将melpa加入->更新->搞定!

现在emacs依然有很多人在为其开发插件,可以说其文件编辑功能依然是领先的.只是有不少老的插件没有为新版做更新,也需要整个社区的努力.

就写这么多吧,一次写太多下次都不知道写啥了,我就一个初学者,下回就从头写写最基础的东西吧,如果你觉得翻manual和wiki看英语太难受的话不妨看下我的翻译.下回更新又不知何年何月了.

我的Emacs折腾经验谈(一) 一些给新人的建议的更多相关文章

  1. 我的Emacs折腾经验谈(四) 也谈Yasnippet

    又是好久没更新了,不过还好,现在慢慢有点感觉了,好长时间不写博客会心里有点感觉欠一点什么东西.觉得每次写了东西都往主页推搞得压力好大,以后就不往网站首页推了,纯留下来供参考,另外就是主要方便从搜索找过 ...

  2. Emacs折腾经验谈

    Emacs折腾经验谈 这几天都没有动力写mongodb的东西,我果然还是太懒了么~ 主要是没有一个系统的东西整理出来,加上我令人拙计的语言表达能力,这个坑只能慢慢再补了. 最近在折腾emacs这个东西 ...

  3. 我的Emacs折腾经验谈(三) speedbar , tabbar 还有linum-mode

    离上一篇博客已经很遥远了,最近总是各种逛,但没有心思静下来写点东西,这回写一下我之前用的一些东西. Speedbar 首先是speedbar,这个东西是emacs自带的,效果立竿见影,请输入M-x s ...

  4. 我的Emacs折腾经验谈(二) Emacs上手难的原因

    既然之前说过要写我怎么继续折腾Emacs的,过了一个星期这里就是第二篇了,突然觉得我把blog这样分节不是很好,每次可能要凑一些东西才有该有的篇幅,而且说的东西可能东一点西一点,这样一篇看下来不利于检 ...

  5. speedbar , tabbar 还有linum-mode

    我的Emacs折腾经验谈(三) speedbar , tabbar 还有linum-mode 离上一篇博客已经很遥远了,最近总是各种逛,但没有心思静下来写点东西,这回写一下我之前用的一些东西. Spe ...

  6. 一年成为Emacs高手(像神一样使用编辑器)

    作者: 陈斌(redguardtoo) 版本号: 20150424 更新时间: <2015-04-24 Fri> 原创时间: <2012-01-31 Tue> 版权: 本文采用 ...

  7. 也来谈谈IT培训

    园子里这篇博客火了:谈谈培训机构的"骗局"给新人一些建议,刚好我也一直被问到这个话题,今天就凑个热闹,一吐为快吧. 我从包工头转行做开发,是进了培训班的,但两年的课程,我只学了半年 ...

  8. RAP, 高效前后端联调框架,接口文档管理工具

    RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据.校验真实接口的正确性,使接口文档成为开发流程中的强依赖.有了结构化的API数据,RAP可以做的更多, ...

  9. 使用 Git 命令去管理项目的版本控制(二)

    参考 上一篇  完成本篇博客,本篇为作者原创,仅供学习参考. 本篇博文在上一篇的基础上这里记录了我的一个小模拟练习.本篇作为自己的学习笔记,也意在方便其他人的学习使用,达到分享目的.下面主要是操作截图 ...

随机推荐

  1. 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注

    原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内 ...

  2. HDU 4006 The kth great number AVL解

    提供动态更新数据.第实时QK大量的值什么? 使用AVL统计数据结构做,比较先进的数据结构的内容. 不知道给出的数据为准值是否有反复.下面的程序是因为我能够处理重复数据出现的情况下,. 了repeat的 ...

  3. Oracle 11g password过期被锁定报道 ORA-28000 the account is locked

    一.触发这个错误的原因及相关因素 是因为oracle11g中默认在default概要文件里设置了"PASSWORD_LIFE_TIME=180天"所导致.在Oracle 11g中是 ...

  4. ThinkPHP框架设计与扩展总结

    详见:http://www.ucai.cn/blogdetail/7028?mid=1&f=5 可在线运行查看效果哦 导言:ThinkPHP框架是国内知名度很高应用很广泛的php框架,我们从一 ...

  5. 云server 性能测试web压力测试

    前言:如今,云server主流.它已成为许多中小型企业的首选server,但是云server它是一个虚拟机.所以性能是一个大问题,从这里开始介绍云server性能测试,云webserver压力测试. ...

  6. Git基础教程

    Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版 本控制工具可以对开发产生如此之多的影响,文章分为两部分, ...

  7. SQL点滴14—编辑数据

    原文:SQL点滴14-编辑数据 数据库中的数据编辑是我们遇到的最频繁的工作,这一个随笔中我来总结一下最常用的数据编辑. select into 经常遇到一种情况是,我们希望创建一个新表,表中的数据来源 ...

  8. C#异步Socket示例

    C#异步Socket示例 概要 在C#领域或者说.net通信领域中有着众多的解决方案,WCF,HttpRequest,WebAPI,Remoting,socket等技术.这些技术都有着自己擅长的领域, ...

  9. 使用QT来制作串口终端

    为什么要使用QT,因为它是跨平台的. 我现在使用的环境是Win7 64bit,使用VS的编译器来编译QT工程. 安装这套环境简单说一下:先到QT官网下载qt-windows-opensource-5. ...

  10. Spring MVC 的 研发之路

    翻译器:intellij idea 一个.创建spring mvcproject   一个. 二. 三. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcX ...