作者:枫雪庭
欢迎转载

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. Trie树的应用:查询IP地址的ISP

    1. 问题描述 给定一个IP地址,如何查询其所属的ISP,如:中国移动(ChinaMobile),中国电信(ChinaTelecom),中国铁通(ChinaTietong)?现有ISP的IP地址区段可 ...

  2. 输入URL之后都发生了什么

    输入URL之后都发生了什么 这个标题印象中已经有很多讨论了.也来说说这个话题. 从头开始,当你的电脑使用网线连接到网络的时候,我们都知道,这个时候你的电脑会获取一个IP,这个IP就是你的唯一标识了.好 ...

  3. VS2015如何新建MVC空模版项目

    直接看图吧:

  4. qt 自动产生 Guid 方法

    strcpy(cmd->uid,QUuid::createUuid().toString().toStdString().c_str());

  5. Bootstrap学习笔记系列3-------Bootstrap简单表单显示

    表单布局 垂直或基本表单 基本的表单结构时BootStrap自带的,创建基本表单的步骤如下: 向父<form>元素添加role = "form": 为了获取最佳的间距, ...

  6. 介绍开源的.net通信框架NetworkComms框架 源码分析(十)DOSProtection

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

  7. MongoDB2.6 新特性

    MongoDB 2.6 已经在今天发布,当然,关注MongoDB的同志自然知道这个消息. 整个MongoDB2.6,个人觉得认证系统是一个重新设计的系统.当然,MongoDB 2.4.6开始,就已经在 ...

  8. 基于.Net Framework 4.0 Web API开发(5):ASP.NET Web APIs AJAX 跨域请求解决办法(CORS实现)

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特 ...

  9. [函數] Firemonkey 各平台 "简体" / "繁体" 判断

    目前的 Delphi 10 Seattle 的 TLang 尚不支持取得简体及繁体的语系字符,在能取得正确的语系字符后(整理中),才能使用下列函数判断: function ChineseLang(co ...

  10. SpringMVC框架介绍

     1. SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无须实现任何接口. 2.支持REST风格的URL请求. 3.采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵 ...