在过去的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!