作者:枫雪庭
欢迎转载

Emacs学习心得之 基础配置

1.前言
2.基础配置

一、前言

本篇博文记录了Emacs的一些基础配置,

其中,具体配置基于博客:
http://www.tuicool.com/articles/uaUNBzN                      (Emacs 配置文件新手攻略(2014))

并参考了以下文章:
http://blog.csdn.net/blueboy82006/article/details/5309280             (在emacs中显示行号)
http://www.cnblogs.com/liyongmou/archive/2013/04/26/3044155.html#sec-1-1  (emacs自动补全插件auto-complet和yasnippet,安装、配置和扩展)
https://github.com/joaotavora/yasnippet                      (yasnippet in Github)
https://www.douban.com/group/topic/9403585/                  (大家如何在emacs里面执行命令行?)

二、基础配置

使用目录(~/.emacs.d/ ) 对Emacs进行简单配置,完成了如下配置:
1. 自动补完( auto-complete 和yasnippet )
2. 显示行数

配置放在 这里 ,目录结构如下

~/.emacs.d/
README.md   #请无视该文件
init.el       #Emacs会自动从init.el开始执行
lisp/       #就是加载各个插件的初始化文件的位置啦
init-xxx.el    #某初始化文件

具体配置如下:

init.el

init.el 主要就是下面几句:

(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory))

(require 'init-utils)
(require 'init-elpa)
(require 'init-yasnippet)
(require 'init-auto-complete) //显示行数
(global-linum-mode t) (provide 'init)

init-utils.el

来自 Purcell ,目的是把一些相互依赖的feature的加载顺序理顺,例如feature A依赖于feature B,则可以写成 (after-load 'B 'A) ,这样如果错误地在B之前require了A也不会影响正常启动。

;;after-load
;;例如feature A依赖于feature B,则可以写成 (after-load 'B 'A) (defmacro after-load (feature &rest body)
"After FEATURE is loaded, evaluate BODY."
(declare (indent defun))
`(eval-after-load ,feature
'(progn ,@body))) (provide 'init-utils)

init-elpa.el

也是来自 Purcell 那里截取过来的,但是去掉了很多用不上的函数。
该文件初始化Emacs的包管理系统 ELPA ,

(require 'package)

;; 增加软件包仓库
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
(when (< emacs-major-version )
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("melpa-stable" . "http://melpa-stable.milkbox.net/packages/")) ;; 定义require-package函数
(defun require-package (package &optional min-version no-refresh)
"Install given PACKAGE, optionally requiring MIN-VERSION.
If NO-REFRESH is non-nil, the available package lists will not be
re-downloaded in order to locate PACKAGE."
(if (package-installed-p package min-version)
t
(if (or (assoc package package-archive-contents) no-refresh)
(package-install package)
(progn
(package-refresh-contents)
(require-package package min-version t))))) (package-initialize)
(provide 'init-elpa)

有了ELPA,给Emacs装插件就变的非常容易了。比方说你需要一个叫 example 的插件,那么可以在 lisp/ 目录下增加一个文件 init-example.el :

;; init-example.el
(require-package 'example)
(require 'example-autoloads)
(provide 'init-example)
然后在 init.el 中加入一句 (require 'init-example) (注意这一句要放在 (require 'init-elpa) 之后)即可。

init-auto-complete.el 和 init-yasnippet.el

init-auto-complete.el 和 init-yasnippet.el 一起用于配置自动补完, 分别如下配置:
init-auto-complete.el:

(require-package 'auto-complete)
(require 'auto-complete-config) (global-auto-complete-mode t)
;; 把自定义的dict加到auto-complete的字典中去
(add-to-list 'ac-dictionary-directories
(expand-file-name "lisp/custom-dicts" user-emacs-directory))
;; 按下TAB时首先缩进所在行,然后尝试补全
(setq tab-always-indent 'complete)
;; 阻止自动触发补全动作
(setq-default ac-expand-on-auto-complete nil)
(setq-default ac-auto-start nil)
;; 用TAB作为手动触发补全动作的快捷键
(ac-set-trigger-key "TAB")
;; 使用after-load来确保ac-source-yasnippet已经完成加载
(after-load 'init-yasnippet
(set-default 'ac-sources
'(ac-source-dictionary
ac-source-words-in-buffer
ac-source-words-in-same-mode-buffers
ac-source-words-in-all-buffer
ac-source-functions
ac-source-yasnippet)))
(require 'init-ac-source) (provide 'init-auto-complete)

init-yasnippet.el:

(require-package 'yasnippet)
(require 'yasnippet)
;; 使用Ctrl-c k作为唯一的触发快捷键
(define-key yas-minor-mode-map (kbd "<tab>") nil)
(define-key yas-minor-mode-map (kbd "TAB") nil)
(define-key yas-minor-mode-map (kbd "C-c k") 'yas-expand) (yas-global-mode t) (provide 'init-yasnippet)

Emacs学习心得之 基础配置的更多相关文章

  1. Emacs学习心得之 基础操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...

  2. GitHub学习心得之 安装配置与多帐号管理

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 GitHub学习心得之 安装配置与多帐号管理 1.前言2.GitHub Linux安装(ub ...

  3. Emacs学习心得之 LaTeX编辑

    目录 1. 前言 2. texlive的安装 3. AUCTEX的安装和配置 4. RefTEX的安装和配置 一.前言 本篇博文记录了Emacs下LaTeX编辑环境的搭建,参考一下文章: http:/ ...

  4. Java开发学习(三)----Bean基础配置及其作用范围

    一.bean基础配置 对于bean的基础配置如下 <bean id="" class=""/> 其中,bean标签的功能.使用方式以及id和clas ...

  5. GitHub学习心得之 简单操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...

  6. Hibernate学习笔记2.1(Hibernate基础配置)

    Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...

  7. Linux基础入门---学习心得

    之前一直以为Linux和Windows差不多,但是学习了Linux基础入门之后才发现两种操作系统之间差距非常大. Linux只是在硬件之上的内核和系统调用,就连我们在Windows里习以为常的图形界面 ...

  8. hibernate学习笔记(1)基础配置与jar包

    下载hibernate基础jar包,并解压hibernate-core-4.2.4.final 在myeclipse中添加hibernate的dtd支持: location为D:\学习\imooc-h ...

  9. Linux系统学习 十六、VSFTP服务—本地用户访问—基本用户基础配置

    缺点,ftp密码是和系统密码是一致的,并不安全 先设置两个测试用户 test1      123123 test2      123123 基本用户基础配置 1.本地用户基本配置 local_enab ...

随机推荐

  1. Microsoft Azure News(3) Azure新的基本实例上线 (Basic Virtual Machine)

    <Windows Azure Platform 系列文章目录> 细心的读者可能会发现,我们在创建Azure Virtual Machine的时候,虚拟机类型分为两种:基本和标准.如下图: ...

  2. 设计宝库:22套精美的 PhotoShop 素材免费下载

    <设计宝库>系列给大家带来22套精美的 PSD 设计素材,你可以免费下载使用.设计师经常会去网上搜罗各种各样的素材,这些免费素材不仅能帮助他们节省大量的时间,而且能有很好的效果.非常感谢那 ...

  3. QT学习笔记5

    Qt标准对话框之QFileDialog //QString path=QFileDialog::getOpenFileName(this,tr("open image"),&quo ...

  4. Elasticsearch——禁止Body中的index覆盖Url中的index参数

    本篇继续一下Elasticsearch日常使用的技巧翻译. 在Elasticsearch有很多的api支持在body中指定_index等信息,比如mget或者msearch以及bulk. 默认的情况下 ...

  5. a[href^=""]的解释

    a[href^="绝对路径"]这个算一种属性选择器,在这里是用来选择链接属性为“绝对路径”的a标签,其中的^其实是"以什么为开始"(begin with)的意思 ...

  6. 【转载】async & await 的前世今生(Updated)

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...

  7. LINQ的Except方法

    在两个集合中,左边集合减去右边集合的元素: source code: List<int> a = new List<int>{ { }, { }, { } }; List< ...

  8. Win8 app判断网络连接状态

    Win8 app判断网络连接状态 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; ...

  9. 介绍开源的.net通信框架NetworkComms框架 源码分析(二十 )ConnectionCreate

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  10. mysql---ENCODE警告

    'ENCODE' is deprecated and will be removed in a future release. Please use AES_ENCRYPT instead ***** ...