在过去的3个月里面我一直且仅仅使用Emacs, 在这之前当然我也尝试过各种Editor, 其中也有不乏优秀的Editor,如Sublime Text和SlickEdit,他们也是自己曾经钟情已久且 大力推荐的Editor。但是今天我却毅然的抛弃了他们,且绝不回头! 为什么是Emacs? 为什么不是VIM? 我曾经觉得VIM的几种模式是多么的逆天,而选择了Emacs! 现在看来当初是多么荒唐,然后VIM的几种模式和奇高的编辑效率则被后世标榜为人机交互 的典范。当然这里膜拜完了VIM有必要再赞扬一下Emacs了。Emacs是一种信仰! Emacs是一个伪装成编辑器的操作系统,他可以帮你做任何事,包括煮咖啡^_^
如果你看到这里有了学习Emacs的冲动,但是事实上学习他也不是一件简单的事情,不过 也不要有压力,比起VIM它入门会快得多,但是要想像神一样使用它,或许大部分人 都不会哟这么一天,因为大部分人都不是神! 我们只能去膜拜Richard Stallman 和 Linux Torvalds 大神!1
Okay, 回到正题, 最近由于越来越多的Linux下面的开发,然后没有了sourceinsight, 没有了VS,没有了windows的各种"方便",唤起了大家学习VIM和Emacs的热情. 所以趁此机会,分享一下个人的学习感悟,也希望能够让更多的人中毒, 这篇文章 主要讲述一下我是如何 使用Emacs更高效的Working,如何将我们大部分的Workflow 放到Emacs里面, 这里假设你已经了解了Emacs的一些基本知识2
Emacs 如同大多数GNU软件一样具有良好的跨平台性,支援的平台包括GNU Linux, Mac OSX and
MS Windows等, 最新的release 版本为24.3(March 11, 2003)。在Windows 平台上面虽然有
GNU Emacs for Windows,但是我强烈推荐GNU Emacs for Cygwin! 他们差异在于前者是
Windows本地编译生成的,而后者是依赖于Cygwin环境。原因在于后者可以获得和Linux/Unix下面统一
的使用体验,简单来说后者的shell为Cygwin下面的Bash,而前者则为windows的cmd。这样你也不会
受到windows的path和Posix path不兼容的问题困扰。
Homebrew或者Macport等包管理器在命令行下面安装。作为一款现代的编辑器拥有一个漂亮的外表是必不可少的,由于之前使用Sublime Text和Textmate的缘故,对Monokai theme
非常钟情,所以Emacs里面仍然保持使用Monokai作为主题。当然看起来比较现代了还不行,还要改造一下Emacs默认
的一些设置,比如去掉Toolbox Scrollbar Menubar等等。除此之外配置一款等宽的适合编程的字体也必不可少,windows
下面推荐Consolas Mac OSX下面推荐Monokai。
从Emacs 24开始已经内置了插件包管理工具elpa,这样你完全不必为寻找插件,升级插件,解决插件不兼容等问题而困惑了。安装
,卸载和升级都灰常简单。
(when (>= emacs-major-version 24)
(require 'package)
(package-initialize)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
)
IDO mode ervery, 使用ido mode + ibuffer mode可以让你打开文件,切换buffer变得非常的酷。并且支持模糊匹配!
C-x f open file
C-x C-f open file
C-x b switch buffer
C-x k kill buffer
C-x C-b ibuffer list
可视化的切换窗口
C-x o switch window
Dired 是一个Emacs内置的目录和文件管理器,加上Dired+ Dired-x这两个插件他将变得更强大,这样你就很少
回去开windows explorer了,常用的功能包括:新建、删除、重命名、拷贝文件目录以及文件预览、打开、关闭、在目录树上下切换等
很多人不敢用VIM或者Emacs,或者说离不开source insight,是因为前者没有IDE的各种代码导航功能。
这里简单介绍使用Cscope+Projectile+Imenue进行项目文件内的代码导航功能。当然基本的语法高亮,符号自动匹配,智能缩进等就不说了。
C-c o open file in project
C-x g jump to function
emacs_open_in_project.png emacs_jump_func.png
C-. goto global define
C-/ goto function called
C-, back to the last postion
C-; find all symbol
C-' find all text
使用Auto Complete和yasnippts 可以构建一个强大的代码自动完成和模板系统的功能。
使用psvn和magit可以方便的在Emacs里面进行版本控制。
使用ediff可以方便的对代码进行compare和merge。
Org mode5 本来是Emacs的杀手锏功能。支持写 to-do 列表,日志管理,做笔记,做工程计划或者写网页。所以很多人用Org-mode来做GTD的工具。 我自己不是GTD的重度使用者,然后一般的文档我都偏爱用Markdown mode for Emacs6来写,所以Org mode实际没怎么使用。
日历,计算器以及一些小游戏。
上面简单介绍了我目前使用到的一些功能,当然这仅仅是Emacs的九牛一毛。你或许会不屑说着些功能你都可以windows上面的各种tool来代替,没错或许如此,
但是你试想一下,如果只给你一个telnet ssh到server上的terminal,你怎么进行软件开发? 没错,Emacs与生俱来的command line模式可以毫无压力的
搞定这些。你仅仅需要把你的emacs configure文件copy到你的home目录即可!
我自己的emacs configure文件经过近3个月的沉淀(基本上每周至少2次upate),其间参考了各个大神的配置,也经历了两次大的版本改动,目前在elpa的package管理
之下进行模块化,在目前的应用下面应该比较成熟。所以如果你刚开始Emacs推荐和欢迎 fork!