【程序猿助手】Emacs,最强的编辑器,之间的不




内容简单介绍

1、Emacs简单介绍

2、Emacs三个平台的安装与配置

3、自己主动补全插件

4、小编的Emacs配置文件

5、经常使用快捷方式

6、和版本号控制系统的配合(以SVN为例)



【程序猿小助手】系列


在这个系列文章中(不定期更新)。小编会把这些年(也没几年)的编程学习和工作中使用到的个人感觉很好的软件推荐给大家,希望可以共享美好资源。使大家提高编程和办事效率。



Emacs,最强编辑器,没有之中的一个


小编知道。此标题一出,肯定会遭受广大群众“诟病”。说不好还会被其它编辑器的粉丝暗地里“干掉”。


比方,Vim编辑器的粉丝可能就会来“踢馆”,VS或Eclipse的粉丝也后续会“群起而攻”,可是小编仅仅是表达一下自己的感受。请拍砖的时候轻一点。鸡蛋少扔几个。假设扔的鸡蛋多也请多扔几个番茄过来,这样我能够做番茄炒蛋,谢谢。

有种张无忌在光明顶被6大门派群“围剿”的架势...


对于非常多人来说,使用Vim和Emacs,不仅是提升“逼格”的方式,更是上升到“信仰”的层面,夸张吧。

当然这和宗教信仰不一样,仅仅是一种可爱的“偏执”而已。感觉自己萌萌哒~


只是。Emacs实在能做非常多事,不要觉得它就仅仅是一个文本编辑器。它能够说是一个整合环境,或可称它为“集成开发环境”,它还能够做下面事情:


  1. 上网,浏览网页

  2. 看视频

  3. 收发邮件

  4. 调试程序,结合GDB,EDebug等。支持C/C++,Perl。Python,Lisp等等

  5. 玩游戏

  6. 计算器

  7. 记日记

  8. 管理日程。Task,ToDo,约会等

  9. 个人信息管理

  10. 文件夹管理

  11. 文件比較

  12. 阅读info和man文档

  13. 等等


小编曾经在Linux下编写代码是使用Vim编辑器的,也很强大,可是自从2014年接触到Emacs之后。就爱上了Emacs(fall in love with Emacs),Vim尽管有时还会用到,可是大部分时间编写代码还是用的Emacs。


一開始我不知道为什么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独有的。依照被大众接受的程度,这9种思想依次是:


  1. 条件结构(即"if-then-else"结构)。如今大家都认为这是理所当然的,可是Fortran I就没有这个结构。它仅仅有基于底层机器指令的goto结构。

  2. 函数也是一种数据类型

    在Lisp语言中。函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation)。可以储存在变量中,也能当作參数传递。一种数据类型应该有的功能,它都有。

  3. 递归。Lisp是第一种支持递归函数的高级语言。

  4. 变量的动态类型

    在Lisp语言中,全部变量实际上都是指针,所指向的值有类型之分。而变量本身没有。复制变量就相当于复制指针。而不是复制它们指向的数据。

  5. 垃圾回收机制

  6. 程序由表达式(expression)组成。Lisp程序是一些表达式区块的集合。每一个表达式都返回一个值。

    这与Fortran和大多数后来的语言都截然不同。它们的程序由表达式和语句(statement)组成。

  7. 符号(symbol)类型

    符号实际上是一种指针。指向储存在哈希表中的字符串。

    所以。比較两个符号是否相等,仅仅要看它们的指针是否一样即可了,不用逐个字符地比較。

  8. 代码使用符号和常量组成的树形表示法(notation)

  9. 论什么时候,整个语言都是可用的

    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在内的非常多开源project。GNUproject使得世界各地的程序猿能够为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的代码来编译安装(逼格最高的方式):


  1. 首先去

    ftp://ftp.gnu.org/pub/gnu/emacs


    上面有Emacs的差点儿全部版本号的源码包。下载最新版的(用老版的也能够),如: emacs-24.5.tar.gz

  2. 解压 emacs-24.5.tar.gz 并编译。安装,在终端(Terminal)中依次执行下面命令(假设是其它版本号,则将例如以下命令中的24.5替换为对应版本号就可以):

    tar -zxvf emacs-24.5.tar.gz   (解压文件)
    cd emacs-24.5        (进入文件夹)
    ./configure              (配置)
    make                      (编译)
    sudo make install   (安装,会提示你输入管理员password)


安装完之后要启动Emacs非常easy,开一个终端(Terminal),输入emacs,回车。就能够了。

只是小编嫌这样太麻烦。能够用更简单的方式来打开Emacs,我这里用一个键就能够了(演示环境是Fedora 21。只是其它系统如Ubuntu类似):


  1. 打开Fedora的“设置” (肯定知道设置在哪里吧)

  2. 选择“键盘”

  3. 选择列表中的“自己定义快捷方式”。然后点击加号“+”,用于加入新的快捷方式

  4. 选择快捷方式的按键,小编这里选的是F2这个键,然后填写命令,就是“emacs”。再填写快捷方式的名称,这个随便填,我填的是“Emacs”,确定



  5. 按F2键试试。是不是就启动Emacs啦?这酸爽不言而喻!


3. Mac OS下安装Emacs


Mac下安装Emacs。网上有不少文章。实用Git弄下来Emacs的源代码然后编译安装的。 也实用一些包管理软件来安装的,可是小编推荐一个更方便的方式,和Mac下安装QQ,迅雷那样方便:


http://emacsformacosx.com/


上这个网。然后下载那个dmg包。Mac用户肯定懂的,就是Mac下安装软件的最经常使用方式。然后就没有然后了... 假设这样你都不会装Emacs,那真心不是必需用Emacs了... 



自己主动补全插件


安装完Emacs之后,还须要安装一个自己主动补全(能够自己主动补全keyword,文本等)的扩展,很强大。名叫company-mode,官网:


http://company-mode.github.io/


幸好。这个扩展并不须要我们依照传统的方式从官网下载、安装到Emacs里面,由于Emacs里有个安装扩展的列表,有点类似 Debian系列的 apt-get 和 Redhat系列的yum 这种包管理工具,所以我们仅仅须要按步骤安装:


  1. 按下 M-x 来调出命令输入

  2. 输入 list-packages,回车



  3. 在出现的列表里,点击 company

  4. 在右边出现的新缓冲区里点击 Install(英文: 安装)



  5. 点击 Yes



  6. 開始感受自己主动补全的乐趣吧


用此方法(list-packages命令)也能够安装非常多其它的Emacs的插件(扩展),大家也看到列表里有非常多插件了吧,所以说Emacs都有点像一个小型的操作系统。



小编的Emacs配置文件


请点击“阅读原文”来下载小编打包好的压缩文件(.rar格式),内含小编的 Emacs配置文件.emacs (前面有一个点的,不要忘啦)和三个实用的模块。供 .emacs 文件调用。


当然大家能够从网上下载一些大牛的Emacs配置文件。看一下他们的Emacs快捷键(除了主要的一些通用快捷键以外,用户能够自己定义非常多快捷键,能够定义在 .emacs 文件里)。


假设你“不幸”选择使用小编的Emacs配置文件,那么承蒙看得起:


  1. 请用小编的 .emacs 文件替换你的家文件夹的.emacs文件 (安装完Emacs,你的家文件夹,也就是 ~ 下就会有一个 .emacs 文件)。


  2. 把压缩文件中的其它三个模块文件放置到 .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键)。

当然全部的按键都能够自己定义。



所以以下我在讲述快捷键的组合表示方式时:


  1. C 代表Ctrl键

  2. M 代表Alt键或者在苹果的Mac系统下是Cmd键

  3. C-x C-c  代表着,先按C-x,再按C-c

  4. C-x k  代表着,先按C-x,松开手,再按k


小编平时最经常使用的是这些快捷键组合


  1. M-s  : 新建一个buffer(缓冲区)

  2. C-x O : 注意是大写的O,不是零,所以须要按住shift键再按o键。

    用于在缓冲区之间切换

  3. C-g : 取消当前操作

  4. C-x u :  回到上一步。相当于Undo

  5. C-x C-3 : 把缓冲区(buffer)分为左右两个。新的一个缓冲区是复制当前的缓冲区 (能够运行多次。来切割出非常多小窗体)

  6. C-x C-2 : 把缓冲区(buffer)分为上下两个。新的一个缓冲区是复制当前的缓冲区 (能够运行多次,来切割出非常多小窗体)

  7. M-w : 选中文字的情况是复制文字。而假设没有选中文字则是复制当前的一行

  8. C-w : 选中文字的情况是剪切文字,而假设没有选中文字则是剪切当前的一行

  9. M-x : 调出命令输入,能够在后面接命令。比方man。svn-status。等

  10. C-y : 黏贴

  11. C-x C-s : 保存文本

  12. C-x C-f : 打开文件,假设文件不存在,则新建文件

  13. C-x C-v : 打开一个文件,代替当前缓冲区

  14. C-x k : 关闭当前缓冲区(buffer)

  15. C-s : 向前搜索

  16. C-r : 向后搜索

  17. C-x h : 全选

  18. C-v : 向下翻页

  19. M-v : 向上翻页

  20. C-f : 前进一个字符

  21. C-b : 后退一个字符

  22. M-f : 前进一个单词

  23. M-b : 后退一个单词

  24. C-@ : 标记開始区域

  25. C-a : 移到行首

  26. C-e : 移到行尾

  27. M-a : 移到句首

  28. M-e : 移到句尾

  29. M-< : 缓冲区头部

  30. M-> : 缓冲区尾部

  31. M-g M-g,再输入数字 : 跳转到文本的第几行

  32. C-x 0 : 关闭当前缓冲区

  33. C-x C-c : 退出Emacs

  34. 临时仅仅能记起来这么多啦,还有非常多快捷键就要你自己去发掘啦!小编平时也不会全部的快捷键都用上,上述的快捷键组合是最经常使用的。



注意: 千万不要死记这些快捷键组合,随着你使用Emacs,非常快就能记住的,相信我!


Emacs另一个非常大的优点就是差点儿全部的快捷键按键都在键盘的左下角。用左手就能单独完毕大部分操作。而右手则能够玩游戏(哦,不正确,是操作鼠标),提高效率。或者说,你用好了Emacs的快捷键组合。编辑代码时甚至不须要鼠标啦,两个手在键盘上就够了!



另一个平时经常使用的功能就是查询函数,能够方便查询已定义的函数:


  1. 按下 M-x 来调出命令输入

  2. 输入 man 。也就是Linux或Unix系统的man命令,是manuall的缩写,也就是"手冊"的意思

  3. 然后输入你要查询的函数名,回车

  4. 就出来啦。比方小编查询fprintf函数,就会弹出下图右边的缓冲区:





给出小编的 .emacs 配置文件的内容吧。免得万一下载链接失效了(至于那三个模块。能够在网上找到下载的: php-mode.el   psvn.el    saved-places):


;;
;; 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),所以假设你使用了小编的Emacs配置文件。还能够和SVN(当然你要先安装SVN, Fedora下是 sudo yum install subversion ; Ubuntu下是 sudo apt-get install subversion )配合使用。超级方便,比方你改动了几个文件。那么在包括 .svn 这个文件的那个目录里按下:  M-x。然后输入: svn-status。回车。确认,就会显示一个列表啦,就是SVN的svn status命令所显示的状态列表。




然后,选中你要提交的文件,按 m 键,你能够一次选中好几个。取消选中按 u 键。

按 c 键開始编辑提交凝视(Comment),例如以下图(绿色的是已经选中(按 m 键)要提交的文件):




我这里输入了“改动了帮助文档”这一句凝视,完毕之后。按两次 “C-c”,就提交(commit)好了,很快捷。


不知道SVN是什么的读者。能够百度一下,SVN是一个经常使用的版本号控制软件。其它的更先进的版本号控制系统有Git, Mercurial等。眼下所在公司不大。所以用SVN(集中式版本号控制系统)也方便,之前在其它公司用过Git和Mercurial(这两个是分布式版本号控 制系统)。



尝试一下Emacs吧,真的是“神器”!

谁用谁知道。用过都说好~



程序猿联盟社区

眼下有一个微信群和一个QQ群(微信群130人以上,QQ群460人以上),凡是对编程感兴趣的朋友都能够加,大家能够交流,学习,互动。讨论编写的程序的源码。编程问答等。


微信群(程序猿联盟),加群请私信我(微信群人数超过100之后,不能通过扫描二维码增加了,仅仅能私信我,谢谢)


QQ群(程序猿联盟),群号是 413981577


百度贴吧 【程序猿联盟】 欢迎您增加,交流编程,讨论代码,共享资源。已经有非常多话题。

吧主就是小编。

http://tieba.baidu.com/f?kw=%E7%A8%8B%E5%BA%8F%E5%91%98%E8%81%94%E7%9B%9F&ie=utf-8

点击左下角【阅读原文】就可以进入 【程序猿联盟】 百度贴吧


手机微信里的二维码图片怎样“扫描”呢?
小窍门:
在微信里长按图片,选择“识别图中二维码”,就能够了。


QQ群文件中有非常多编程书籍PDF和其它资料。扫描以下二维码加QQ群:




我们还建立了一个公共的百度云盘。2TB容量,已有非常多优秀编程资源,大家也能够上传。

链接加群之后会发送。


《程序猿联盟》的微社区,方便大家提问和互动。能够关注一下。

微社区地址和二维码例如以下:

http://m.wsq.qq.com/264152148


谢谢!




程序猿联盟 微信公众号*您若认为本文不错。点击画面右上角《···》button“分享到朋友圈或“发送给朋友

*新朋友请关注「程序猿联盟」微信搜公众号  ProgrammerLeague

小编微信号frogoscar

小编QQ号:  379641629

小编邮箱:    enmingx@gmail.com

程序猿联盟QQ群:413981577

程序猿联盟微信群:先加我微信


有朋友反映看手机端的文章太累,事实上是能够用浏览器网页来看的:

方法1. 点击画面右上角的《···》button,然后选择“复制链接”。再把链接黏贴到你的浏览器里面或用邮件发送给自己,就能够在电脑的浏览器里打开了



方法2. 头条网www.toutiao.com,搜索我的自媒体“程序猿联盟”。内有全部文章,也能够直接进这个链接:http://www.toutiao.com/m3750422747/


方法3. 我的51CTO博客。CSDN博客和博客园链接(全部文章都在上面)
http://4526621.blog.51cto.com

http://blog.csdn.net/frogoscar

www.cnblogs.com/frogoscar


怎样查看全部文章

点击“查看公众号”,再点击“查看历史消息



posted @ 2015-06-10 17:53  blfshiye  阅读(12408)  评论(0编辑  收藏  举报