内容简介
1、Emacs简介
2、Emacs三个平台的安装与配置

3、自动补全插件
4、
5、常用快捷办法
6、和版本掌握系统的合营(以SVN为例)
【程序员小助手】系列
在这个系列文章中(不定期更新),
Emacs,最强编辑器,没有之一
比如,Vim编辑器的粉丝可能就会来“踢馆”,VS或Eclipse的粉丝也兴许会“群起而攻”,但是
对付很多人来说,利用Vim和Emacs,不仅是提升“逼格”的办法,更是上升到“崇奉”的层面,夸年夜吧。当然这和宗教崇奉不一样,只是一种可爱的“偏执”而已。
Emacs实在能做很多事,不要认为它就只是一个文本编辑器,它可以说是一个整合环境,或可称它为“集成开拓环境”,它还可以做以下事情:
上网,浏览网页
看视频
收发邮件
调试程序,结合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等
玩游戏
打算器
记日记
管理日程,Task,ToDo,约会等
个人信息管理
目录管理
文件比较
阅读info和man文档
等等
一开始我不知道为什么Emacs如此幽美又强大,直到后来阅读了《黑客与画家》这部经典著作(硅谷创业教父 Paul Graham 保罗•格雷厄姆所写,实在也便是他的一些日志汇编而成),里面讲述了Lisp措辞的强大和幽美,而Emacs便是用Lisp措辞编写的,怪不得。
闲扯一下为什么Lisp措辞如此强大,虽然这门措辞很老了,在2015年6月的TIOBE编程措辞排行榜也只有第31位,但是:
摘录自 阮一峰 翻译的《黑客与画家》一书,推举大家一读:
如果我们把盛行的编程措辞,以这样的顺序排列:Java、Perl、Python、Ruby。你会创造,排在越后面的措辞,越像Lisp。 Python模拟Lisp,乃至把许多Lisp黑客认为属于设计缺点的功能,也一起模拟了。至于Ruby,如果回到1975年,你声称它是一种Lisp方言,没有人会反对。
编程措辞现在的发展,不过刚刚遇上1958年Lisp措辞的水平。
1958年,John McCarthy设计了Lisp措辞。我认为,当前最新潮的编程措辞,只是实现了他在1958年的设想而已。 这怎么可能呢?打算机技能的发展,不这天月牙异吗?
1958年的技能,怎么可能超过本日的水平呢? 让我见告你缘故原由。 这是由于John McCarthy本来没打算把Lisp设计成编程措辞,至少不是我们现在意义上的编程措辞。他的原意只是想做一种理论演算,用更简洁的办法定义图灵机。 以是,为什么上个世纪50年代的编程措辞,到现在还没有过期?大略说,由于这种措辞实质上不是一种技能,而是数学。数学是不会过期的。
你不应该把Lisp措辞与50年代的硬件联系在一起,而是该当把它与快速排序(Quicksort)算法进行类比。这种算法是1960年提出的,至今仍旧是最快的通用排序方法。
直到本日,最高级的主流措辞,也只是刚刚靠近Lisp的水平。虽然已经很靠近了,但还是没有Lisp那样强大。
Lisp措辞出身的时候,就包含了9种新思想。个中一些我们本日已经习以为常,另一些则刚刚在其他高等措辞中涌现,至今还有2种是Lisp独占的。
怎么样,是不是很有兴趣理解一下如此强大的Lisp措辞开拓出来的Emacs是如何幽美呢?
当然此文不可能带大家领略所有Emacs的幽美之处。说实话,Emacs肯定存在不敷之处:
更多Emacs的好处只有大家利用了才能逐步领略。
Emacs简介
Emacs是一种强大的文本编辑器,在程序员和其他以技能事情为主的打算机用户中广受欢迎。
EMACS,即Editor MACroS(编辑器宏)的缩写,最初由Richard Stallman(理查德·马修·斯托曼)于1975年在MIT协同Guy Steele共同完成。
(Richard Stallman可是开源运动之父啊,这位可爱的长胡子大叔抵制Apple,抵制Facebook,抵制Amazon,抵制不少公司和机构。他也是自由软件基金会(Free Software Foundation,简称FSF)的主席,而自由软件基金会主导了包括GNU在内的很多开源工程。GNU工程使得天下各地的程序员可以为Linux操作系统开拓周边软件等,才有了Linux的本日。不然Linus Tovarlds(Linux之父)基本上光是写了一个Linux内核,哪够啊。以是本日的Linux最精确的称谓该当是GNU/Linux )
自出身以来,Emacs蜕变出了浩瀚分支,个中利用最广泛的两种分别是:1984年由Richard Stallman发起并由他掩护至今的GNU Emacs,以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相称的兼容性。它们都利用了Emacs Lisp这种有着极强扩展性的编程措辞,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。
你可以利用Lisp措辞改写Emacs的功能组件,而且可以变动配置,完备自定义Emacs,所有Emacs是充满无限可能的编辑器。
国际化
Emacs支持对多种笔墨的文本编辑,包括UTF-8在内的诸多编码系统,加上对多种字符集、文稿、书写系统,以及不同文化的书写习气都供应了支持,使得天下上大多数措辞的利用者都能通过Emacs进行文本处理。Emacs还能通过调用诸如ispell这样的外部程序,实现多种措辞的拼写检讨。
跨平台性
Emacs是目前天下上最具可移植性的主要软件之一,能够在当前大多数操作系统上运行,包括类Unix系统(GNU/Linux、各种BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等,还有移动Android平台以及iOS。
缓冲区的观点
初学Emacs须要理解什么是缓冲区:
Emacs里的统统操作都发生在编辑缓冲区(buffer)里,它常日是某个文件的事情副本。如果你正在编辑的编辑缓冲区里包含着某个文件的一个副本,那么当你保存自己所做的改动时,Emacs把编辑缓冲区的内容复制到文件中。 除了事情在文件副本上的缓冲区外,还有一些做临时事情的缓冲区,它就像一张草稿纸,当然也可以随时利用write-file命令(\"大众C-x C-w\公众)或save-buffer命令(“C-x C-s”)保存这类临时事情缓冲区的内容。
可以参考一些高手的Emacs教程和“练级”系列:
http://www.cnblogs.com/robertzml/archive/2009/09/10/1564108.html
http://blog.csdn.net/redguardtoo/article/details/7222501/
http://blog.sina.com.cn/s/blog_6df127760101ll7a.html
http://arch.pconline.com.cn//pcedu/soft/gj/photo/0609/865628_1.html
Emacs的官网:
http://www.gnu.org/software/emacs/
Emacs的中文WiKi:
http://www.emacswiki.org/emacs?interface=zh-cn
轻松一下,关于Emacs的一则玩笑
《Emacs 的日子是这个样子的》
1. 听说有 Emacs 这个东西。试了一下,觉得就像记事本一样。没什么学习曲线。便是……咋也找不到退出的办法……
2. 开始会一些 Emacs 了,开始学习各种 mode,按键绑定,配置方法,开始熟习 Emacs……
3. 比较熟习 Emacs了,基本利用 Emacs干活,每天“活在” Emacs 里面……
4. 非常熟习自己“常用”的 Emacs,可以教别人 Emacs,大量泡 Emacs社区,大量下载、利用和跟踪别人的扩展,已经离不了 Emacs……
5. 逐渐不满 Emacs,逐渐熟习 Lisp 措辞,开始改写“自己”的Emacs,在这期间,又开始四处碰钉子,事情效率总是被一个失落败的修正所影响……
6. 常常修正 Emacs,自己手中的 Emacs基本上每周都和上一周有那么一点不太一样…… 便是,改的太多了,常常在某天整理代码的时候溘然创造……原来还有这么个易用的功能…… 忘却好久了……
7. …… ……
Emacs三个平台的安装与配置
1. Windows下安装Emacs
请到以下链接下载Windows版的Emacs:
https://ftp.gnu.org/gnu/emacs/windows/
请大家下载列表中最新版本的zip文件,比如目前最新版的是2015年5月1日发布的24.5版:
emacs-24.5-bin-i686-mingw32.zip
下载后,用Winrar或7-zip解压,会出来一个文件夹 emacs-24.5-bin-i686-mingw32
内含四个子文件夹:
bin
libexec
share
var
打开bin文件夹,运行个中的 emacs.exe 文件即可开启Emacs,不须要安装:
你可以把emacs.exe这个文件锁定到任务栏,就很方便了,按一下图标就启动了。
2. Linux下安装Emacs
Debian一族(包括Ubuntu)下安装Emacs:
sudo apt-get install emacs
Redhat一族(包括Fedora)下安装Emacs:
sudo yum install emacs
其他的可以搜索如何安装,或者下载Emacs的源代码来编译安装。
下面演示Linux如何下载Emacs的代码来编译安装(逼格最高的办法):
首先去
ftp://ftp.gnu.org/pub/gnu/emacs
上面有Emacs的险些所有版本的源代码包,下载最新版的(用老版的也可以),如: emacs-24.5.tar.gz
解压 emacs-24.5.tar.gz 并编译,安装,在终端(Terminal)中依次运行以下命令(如果是其他版本,则将如下命令中的24.5更换为相应版本即可):
tar -zxvf emacs-24.5.tar.gz (解压文件)
cd emacs-24.5 (进入目录)
./configure (配置)
make (编译)
sudo make install (安装,会提示你输入管理员密码)
安装完之后要启动Emacs很大略,开一个终端(Terminal),输入emacs,回车,就可以了。不过
打开Fedora的“设置” (肯定知道设置在哪里吧)
选择“键盘”
选择列表中的“自定义快捷办法”,然后点击加号“+”,用于添加新的快捷办法
选择快捷办法的按键,
按F2键试试,是不是就启动Emacs啦?这酸爽不言而喻!
3. Mac OS下安装Emacs
Mac下安装Emacs,网上有不少文章,有用Git弄下来Emacs的源码然后编译安装的; 也有用一些包管理软件来安装的,但是
http://emacsformacosx.com/
上这个网,然后下载那个dmg包,Mac用户肯定懂的,便是Mac下安装软件的最常用办法。然后就没有然后了... 如果这样你都不会装Emacs,那至心没必要用Emacs了...
自动补全插件
安装完Emacs之后,还须要安装一个自动补全(可以自动补全关键字,文本等)的扩展,非常强大,名叫company-mode,官网:
http://company-mode.github.io/
幸好,这个扩展并不须要我们按照传统的办法从官网下载、安装到Emacs里面,由于Emacs里有个安装扩展的列表,有点类似 Debian系列的 apt-get 和 Redhat系列的yum 这样的包管理工具,以是我们只须要按步骤安装:
按下 M-x 来调出命令输入
输入 list-packages,回车
在涌现的列表里,点击 company
在右边涌现的新缓冲区里点击 Install(英文: 安装)
点击 Yes
用此方法(list-packages命令)也可以安装很多其他的Emacs的插件(扩展),大家也看到列表里有很多插件了吧,以是说Emacs都有点像一个小型的操作系统。
请点击“阅读原文”来下载
当然大家可以从网高下载一些大牛的Emacs配置文件,看一下他们的Emacs快捷键(除了基本的一些通用快捷键以外,用户可以自定义很多快捷键,可以定义在 .emacs 文件中)。
如果你“不幸”选择利用
请用
把压缩文件里的其他三个模块文件放置到 .emacs.d 这个文件夹下的modules文件夹 (.emacs.d 文件夹是安装完Emacs就会有的,也在家目录里,不过modules文件夹须要你自己创建):
cd ~/.emacs.d/
mkdir modules
cp php-mode.el psvn.el saved-places modules/ (或者手动直接把三个模块文件复制到modules文件夹里)
常用快捷办法
Emacs的快捷键都是绑定于Ctrl和Alt(或称Meta, 在Mac下便是Cmd键)上的,例如C-x便是Ctrl+x,M-x便是Alt+x (在Mac下便是Cmd键)。当然所有的按键都可以自定义。
以是下面我在讲述快捷键的组合表示办法时:
C 代表Ctrl键
M 代表Alt键或者在苹果的Mac系统下是Cmd键
C-x C-c 代表着,先按C-x,再按C-c
C-x k 代表着,先按C-x,松开手,再按k
M-s : 新建一个buffer(缓冲区)
C-x O : 把稳是大写的O,不是零,以是须要按住shift键再按o键。用于在缓冲区之间切换
C-g : 取消当前操作
C-x u : 回到上一步,相称于Undo
C-x C-3 : 把缓冲区(buffer)分为旁边两个,新的一个缓冲区是复制当前的缓冲区 (可以实行多次,来分割出很多小窗口)
C-x C-2 : 把缓冲区(buffer)分为高下两个,新的一个缓冲区是复制当前的缓冲区 (可以实行多次,来分割出很多小窗口)
M-w : 选中笔墨的情形是复制笔墨,而如果没有选中笔墨则是复制当前的一行
C-w : 选中笔墨的情形是剪切笔墨,而如果没有选中笔墨则是剪切当前的一行
M-x : 调出命令输入,可以在后面接命令,比如man,svn-status,等
C-y : 黏贴
C-x C-s : 保存文本
C-x C-f : 打开文件,如果文件不存在,则新建文件
C-x C-v : 打开一个文件,取代当前缓冲区
C-x k : 关闭当前缓冲区(buffer)
C-s : 向前搜索
C-r : 向后搜索
C-x h : 全选
C-v : 向下翻页
M-v : 向上翻页
C-f : 提高一个字符
C-b : 退却撤退一个字符
M-f : 提高一个单词
M-b : 退却撤退一个单词
C-@ : 标记开始区域
C-a : 移到行首
C-e : 移到行尾
M-a : 移到句首
M-e : 移到句尾
M-< : 缓冲区头部
M-> : 缓冲区尾部
M-g M-g,再输入数字 : 跳转到文本的第几行
C-x 0 : 关闭当前缓冲区
C-x C-c : 退出Emacs
暂时只能记起来这么多啦,还有很多快捷键就要你自己去发掘啦!
把稳: 千万不要去世记这些快捷键组合,随着你利用Emacs,很快就能记住的,相信我!
还有一个平时常用的功能便是查询函数,可以方便查询已定义的函数:
按下 M-x 来调出命令输入
输入 man ,也便是Linux或Unix系统的man命令,是manuall的缩写,也便是\"大众手册\"大众的意思
然后输入你要查询的函数名,回车
就出来啦,比如
给出
;;
;; ADDITIONAL REPOSITORY FOR MODULES TO LOAD
;;
(add-to-list 'load-path \"大众~/.emacs.d/modules\公众)
;;
;; ADDITIONNALS MODULES
;;
;;(require 'dsvn)
(require 'psvn)
(require 'php-mode)
(require 'saveplace)
;;(require 'unxls)
;; display the path to the file in the sidebar.
;;(require 'uniquify)
;;
;; KEYBOARD SHORTCUT
;;
(global-set-key [f9] 'compile)
(global-set-key [(control z)] 'undo)
;; We could use 'dabbrev-completion or 'dabbrev-expand
(global-set-key [(control return)] 'dabbrev-completion)
;;(global-set-key \"大众\C-)\公众 'dabbrev-completion)
;;(global-set-key \公众\C-=\"大众 'dabbrev-expand)
(global-set-key \"大众\C-n\"大众 'imenu)
(defun try-to-add-imenu ()
(condition-case nil (imenu-add-to-menubar \公众imenu\"大众) (error nil)))
(add-hook 'font-lock-mode-hook 'try-to-add-imenu)
;; Company mode in all buffers
(add-hook 'after-init-hook 'global-company-mode)
(global-set-key \"大众\M-s\"大众 'new-shell)
(global-set-key (kbd \公众C-x t\公众) 'todo-show)
;;
;; Copy or Cut one line if no content selected
;;
;; copy region or whole line
(global-set-key \公众\M-w\"大众
(lambda ()
(interactive)
(if mark-active
(kill-ring-save (region-beginning)
(region-end))
(progn
(kill-ring-save (line-beginning-position)
(line-end-position))
(message \公众copied line\"大众)))))
;; kill region or whole line
(global-set-key \公众\C-w\公众
(lambda ()
(interactive)
(if mark-active
(kill-region (region-beginning)
(region-end))
(progn
(kill-region (line-beginning-position)
(line-end-position))
(message \公众killed line\"大众)))))
;;
;; FUNCTION DEFINITION
;;
(defun new-shell ()
(interactive)
(let (
(currentbuf (get-buffer-window (current-buffer)))
(newbuf (generate-new-buffer-name \"大众shell\"大众))
)
(generate-new-buffer newbuf)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf newbuf)
(shell newbuf)
)
)
;;
;; resolving compilation problems. This force the environment variables
;; to be set before compiling.
;;
(let ((path (shell-command-to-string \公众. ~/.bashrc; echo -n $PATH\"大众)))
(setenv \"大众PATH\"大众 path)
(setq exec-path
(append
(split-string-and-unquote path \公众:\"大众)
exec-path)))
;;
;; Ugly code for READING XLS (but works)
;; Requires: xlhtml & w3m
;;
(add-to-list 'auto-mode-alist '(\公众\\.xls\\'\"大众 . no-xls))
(defun no-xls (&optional filename)
\"大众Run xlhtml and w3m -dump on the entire buffer.
Optional FILENAME says what filename to use.
This is only necessary for buffers without
proper `buffer-file-name'. FILENAME should
be a real filename, not a path.\"大众
(interactive \"大众fExcel File: \"大众)
(when (and filename
(not (buffer-file-name)))
(write-file (make-temp-file filename)))
(erase-buffer)
(shell-command
(format \"大众xlhtml -nc -te %s | w3m -dump -T text/html\"大众 (buffer-file-name))
(current-buffer))
(setq buffer-file-name nil)
(set-buffer-modified-p nil))
;;
;; START
;;
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(c-block-comment-prefix \"大众//\公众)
'(case-fold-search nil)
'(column-number-mode t)
'(comint-completion-autolist t)
'(comint-completion-recexact t)
'(compilation-always-kill t)
'(compilation-auto-jump-to-first-error nil)
'(compilation-environment PATH=/home/griffon/trunk/indus/bin:/home/fox/components/gnutools/ecos-3\.0/arm-eabi/bin:/home/fox/components/ecos-3\.0/tools/bin:/home/avrdev/bin:/home/thomas/mes_fonctions:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin)
'(compilation-scroll-output (quote first-error))
'(compile-command \"大众./makemake 5010 clean && ./makemake 5010 all -j 8 && ./makemake 5010 program\"大众)
'(completion-show-help t)
'(dabbrev-case-distinction t)
'(dabbrev-case-replace t)
'(doc-view-continuous t)
'(doc-view-image-width 850)
'(doc-view-resolution 200)
'(dynamic-completion-mode t)
'(grep-command \"大众grep --exclude-dir=.svn --exclude=\\TAGS --exclude=\\.{lst,lss,sym,list,o,elf,xml,json,sta,map,deps,d,sx,hex,doc,txt,pdf,tex} -inHr \\"大众\公众)
'(gud-gdb-command-name \"大众arm-eabi-gdb -i=mi main.elf\公众)
'(initial-scratch-message \公众;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.
;; M-s: Open a new shell
\公众)
'(safe-local-variable-values (quote ((todo-categories \"大众Todo\"大众) (todo-categories \"大众barracuda\"大众 \"大众alligator\"大众 \"大众Todo\公众) (todo-categories \"大众alligator\公众 \公众Todo\"大众))))
'(send-mail-function (quote mailclient-send-it))
'(svn-status-hide-unknown t)
'(svn-status-hide-unmodified t))
;;
;; EDITING/IDE
;;
(global-font-lock-mode 1)
(setq auto-mode-alist
(append '((\"大众\.php$\"大众 . php-mode)
(\公众\.module$\"大众 . php-mode))
auto-mode-alist))
;; saving position in files opened with emacsclient
;;(setq server-visit-hook (quote (save-place-find-file-hook)))
(setq-default save-place t)
(setq save-place-file \"大众~/.emacs.d/saved-places\公众)
;; Code completion case-insensitive, seems not working
;;(setq pcomplete-ignore-case t)
;;(setq case-fold-search t)
;;(setq read-buffer-completion-ignore-case t)
;;(setq read-file-name-completion-ignore-case t)
;; display the path to the buffer file using uniquify (required).
;;(setq uniquify-buffer-name-style 'reverse)
;; SHOW FILE PATH IN FRAME TITLE
;;(setq-default frame-title-format \"大众%b (%f)\"大众)
;; Affiche le numéro de ligne et de colonne
(column-number-mode t)
(line-number-mode t)
;;
;; FORMATAGE
;;
;; Suppression des espaces en fin de ligne a l'enregistrement
(add-hook 'c++-mode-hook '(lambda ()
(add-hook 'write-contents-hooks 'delete-trailing-whitespace nil t)))
(add-hook 'c-mode-hook '(lambda ()
(add-hook 'write-contents-hooks 'delete-trailing-whitespace nil t)))
;;(defun set-newline-and-indent ()
;; (local-set-key (kbd \"大众RET\"大众) 'newline-and-indent))
;;(add-hook 'lisp-mode-hook 'set-newline-and-indent)
;;
;; COLORS
;;
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:inherit nil :stipple nil :background \"大众white\"大众 :foreground \公众black\公众 :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 135 :width normal :foundry \"大众unknown\公众 :family \公众DejaVu Sans Mono\"大众))))
'(compilation-warning ((t (:inherit warning))))
'(font-lock-comment-face ((t (:foreground \"大众darkorange4\"大众))))
'(font-lock-function-name-face ((t (:foreground \公众navy\"大众))))
'(font-lock-keyword-face ((t (:foreground \"大众red4\"大众))))
'(font-lock-type-face ((t (:foreground \公众black\公众))))
'(linum ((t (:inherit shadow :background \"大众gray95\"大众))))
'(mode-line ((t (nil nil nil nil :background \"大众grey90\"大众 (:line-width -1 :color nil :style released-button) \"大众black\公众 :box nil :width condensed :foundry \"大众unknown\公众 :family \公众DejaVu Sans Mono\"大众))))
'(svn-status-directory-face ((t (:foreground \"大众tomato\"大众)))))
;; sort of fullscreen
(add-to-list 'default-frame-alist '(left . 0))
(add-to-list 'default-frame-alist '(top . 0))
(add-to-list 'default-frame-alist '(height . 100))
(add-to-list 'default-frame-alist '(width . 200))
和版本掌握系统的合营(以SVN为例)
由于有导入Emacs的SVN模块(psvn.el),以是如果你利用了
然后,选中你要提交的文件,按 m 键,你可以一次选中好几个,取消选中按 u 键。
按 c 键开始编辑提交注释(Comment),如下图(绿色的是已经选中(按 m 键)要提交的文件):
我这里输入了“修正了帮助文档”这一句注释,完成之后,按两次 “C-c”,就提交(commit)好了,非常快捷。
不知道SVN是什么的读者,可以百度一下,SVN是一个常用的版本掌握软件。其他的更前辈的版本掌握系统有Git, Mercurial等。目前所在公司不大,以是用SVN(集中式版本掌握系统)也方便,之前在其他公司用过Git和Mercurial(这两个是分布式版本掌握系统)。
考试测验一下Emacs吧,真的是“神器”!
谁用谁知道,用过都说好~
点击下方链接查看 “Emacs配置文件和三个模块的压缩文件 (
http://pan.baidu.com/s/1bn74FhH
您若以为本文不错,请点击“分享”
新朋友请关注「程序员同盟」微信搜"大众年夜众号 ProgrammerLeague
小编邮箱: enmingx@gmail.com