配置使用emacs也有一段时间了,随着插件的增加和对emacs的更深入理解,有必要对现在的配置做一个更新了。
先说说问题:
目前插件与依赖关系很混乱,都集中在.emacs这个文件中,需要整理
目前对于跨平台的支持不是很好,只有最大化函数,以及工作目录设置做了跨平台
目前对于插件的整理不是很好,插件有放在elpa中的,也有放在plugin中的
一些插件配置了,但是未生效或者与其他插件的快捷键冲突。如:hlem, smex等等。
整理准则
依赖单一化
插件集中化
去平台化
具体解释下:
什么是依赖单一化,即一个插件需要有一个插件的init_xxx.el文件,里面用于做该插件的相关配置。
什么是插件集中化,这个首先针对的是emacs24以上的版本。通过package包管理器对插件进行管理,分为三大类插件:功能性插件(如:主题显示,hlem,smex),UI类插件(如:主题包,tabbar-mode),模式类插件(如:php-mode, web-mode)。
去平台化,顾名思义,可以在mac,linux, windows下运行。 因为package中安装的包绝大多数都是支持各个平台的,所以唯一需要做区分的,就是自己用emacs lisp实现的一些代码,以及对工作环境的私人定制等等。
Ok, 废话说了不少了,直接上步骤。
安装
关于这个不在赘述,各位看官可以看上一篇博文或者自行google。
此处唯一需要注意的点,就是.emacs, .emacs.d 文件与目录所在的路径,以及~所代表的路径是什么。(恩,主要是针对windows)。
引用规则设定
首先,在.emacs中,引入一行代码:
至此,关于.emacs的文件更改就已经结束,剩下的就需要在init.el文件中完成。
在init.el中,只load所需模块或者插件的init-xxx.el文件,不做任何配置或者设置,配置与设置,均在init-xxx.el文件中处理。
包管理器
emacs的特色就是丰富的插件,而emacs24版本之前,需要依赖第三方插件和el-get来下载各种插件,或者自己下载插件的源码进行编译,安装或者直接配置。而emacs24集成了包管理器,只需要M-x package-install,然后输入所需的包名即可。(那个谁,说sublime有包管理器而emacs没有的,速速去领50大板。题外话,sublime的package manager还需要先进行安装,而非集成。)
当然,因为地域以及天朝原因,一些资源包的获取不是非常方便,所以此处我们需要配置下包管理器的下载源。代码如下:
基本配置
最初的emacs带有菜单栏,滚动条,以及工具栏等等,而且一打开的时候也不是最大化,和以前的习惯还是有较大出入的,怎么办呢?莫慌,基本配置修改下即可:
;;不显示工具栏
(tool-bar-mode 0)
;;不现实菜单栏
(menu-bar-mode 0)
;;不显示滚动条
(scroll-bar-mode 0)
;;显示行号与列号
(global-linum-mode 1)
(column-number-mode 1)
;;关闭启动动画
(setq inhibit-startup-message 1)
;;设置初始工作目录
(if (string-equal system-type "windows-nt")
(setq default-directory "G:\\projects")
(setq default-directory "~/work"))
;;设置问答提示为 y-or-n,而不是yes-or-no
(fset 'yes-or-no-p 'y-or-n-p)
;;不生成备份文件,即 xxx.xx~ 类文件
(setq make-backup-files nil)
插件
- ido
ido 插件用于在mini buffer中显示最近使用的命令或者文件,与smex, hlem的功能类似,不过打开文件时,个人比较习惯 ido。
emacs内置ido,要开启这个模式,只需要:
(ido-mode 1)
- wakatime
wakatime 是用来统计编程时间以及使用的编程语言的,支持的编辑器和IDE比较多,直接 package-install 然后输入 wakatime-mode,下载完成直接,引入,并设置好自己的api key,。
另外,他需要python支持,wakatime官方提供了wakatime-cli的程序,用于向wakatime推送数据,使用python的 pip install完成安装,并在emacs中设置好路径即可。
;;加载wakatime mode
(load "~/.emacs.d/elpa/mode/wakatime-mode.el")
;;设定wakatime api key
(custom-set-variables
'(wakatime-api-key "api key")
'(wakatime-cli-path "wakatime-cli 的路径"))
;;全局开启wakatime-mode
(global-wakatime-mode 1)
helm
快速补全的一个插件,非常好用,提供了 imenu, buffers-list 以及 helm-tags 等操作,很多操作仍在摸索中,不过已经感觉非常实用了。smex
也是快速补全的一个插件,在提示命令时异常好用,helm中也有提供,不过暂时还没开始摸索,先配置上去。等待日后再去除unicad
在emacs下面,有时候会出现编码无法识别的情况。而这个插件非常要用,可以自动识别文件编码,目前的缺陷是 utf8mb4的支持不是很好,寻找替代品种。git-emacs
使用git-emacs作为git库的支持,使用了一段时间,感觉还是挺好用的,除了没找到如何git push之外。
mode
所谓的mode,就是根据文件类型做出不同类型的提示,比如打开.cpp文件,就会自动匹配为c++ mode,然后所有在c++ mode中的操作均为生效,而不影响其他mode,非常赞的一个功能,也是我喜欢emacs的原因之一。
目前配置的mode比较少,大概有如下几种 cmake-mode, markdown-mode, php-mode