2017年的最后一篇博客
关于这份配置
- 主要内容:改善emacs的默认行为,c和c++的配置,
evil插件
,hexo+org的博客配置 - 建立时间:2017-12-01
- 更新时间:2018-08-14
上次这份配置写完没多久,发现启动的速度实在太慢,听说Doom Emacs的启动速度 很快,就去尝试下Doom Emacs,发现确实很好用。但是这种配置太过庞大,不符合我的习惯,所以我决定重新写一份配置。这份配置很多东西参考了Doom Emacs
Evil:
我在用emacs之前,我并没有用过vim,当初选择适应=evil=这个插件只是因为它能
够模拟vim中的=leader=键功能,这样就可以不用小拇指按=Ctrl=了。要想使用好这个插件,
得有vim的使用经验或者想学习vim一些高级的操作方式。我现在想回到原生的emacs操作
方式,所以在新的配置里去掉了*Evil*。
Linux下修改键盘映射:https://wiki.archlinux.org/index.php/Xmodmap
文件头部
;;; init.el -*- lexical-binding: t; -*-
(require 'package)
定义常用的目录
常用目录
(defconst mage-emacs-dir
(eval-when-compile (file-truename user-emacs-directory)))
(defconst mage-local-dir (concat mage-emacs-dir ".local/"))
(defconst mage-package-dir (concat mage-local-dir "packages/"))
(defconst mage-cache-dir (concat mage-local-dir "cache/"))
(defconst mage-etc-dir (concat mage-local-dir "etc/"))
(defconst mage-ext-dir (concat mage-emacs-dir "site-lisp/"))
(setq user-emacs-directory (file-name-directory load-file-name))
(setq package-user-dir (concat mage-package-dir "elpa/"))
文件路径
(setq-default abbrev-file-name (concat mage-local-dir "abbrev.el")
auto-save-list-file-name (concat mage-cache-dir "autosave")
backup-directory-alist (list (cons "." (concat mage-cache-dir "backup/")))
custom-file (concat mage-local-dir "custom.el")
mc/list-file (concat mage-etc-dir "mc-lists.el")
pcache-directory (concat mage-cache-dir "pcache/")
request-storage-directory (concat mage-cache-dir "request")
server-auth-dir (concat mage-cache-dir "server/")
shared-game-score-directory (concat mage-etc-dir "shared-game-score/")
tramp-auto-save-directory (concat mage-cache-dir "tramp-auto-save/")
tramp-backup-directory-alist backup-directory-alist
tramp-persistency-file-name (concat mage-cache-dir "tramp-persistency.el")
url-cache-directory (concat mage-cache-dir "url/")
url-configuration-directory (concat mage-etc-dir "url/"))
启动优化
增加启动期间垃圾回收的阈值,启动结束后还原。
设置启动时file-name-handler-alist为nil
(defvar mage--file-name-handler-alist file-name-handler-alist)
(defun mage|pre-init()
(setq gc-cons-threshold 402653184
gc-cons-percentage 1.0
file-name-handler-alist nil
))
(defun mage|post-init ()
(setq gc-cons-threshold 16777216
gc-cons-percentage 0.15
file-name-handler-alist mage--file-name-handler-alist))
(add-hook 'before-init-hook #'mage|pre-init)
(add-hook 'emacs-startup-hook #'mage|post-init)
[TODO]{.todo .TODO} 利用autoload {#利用autoload}
把所有路径加入load-path,减少load-path遍历的次数
package太少时无明显效果
(dolist (package-path (directory-files package-user-dir t))
(if (directory-name-p package-path)
(add-to-list 'load-path package-path)))
显示加载时间
(defvar mage-init-time 'nil)
(defun mage-display-benchmark()
(message "Mage loaded %s packages in %.03fs"
(length package-activated-list)
(or mage-init-time
(setq mage-init-time
(float-time (time-subtract (current-time) before-init-time))))))
(add-hook 'emacs-startup-hook #'mage-display-benchmark)
关闭各种bar
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
初始化的major-mode为普通模式
(setq-default initial-major-mode 'fundamental-mode)
载入配置文件
(load custom-file t t t)
优化默认值
UTF-8作为默认的编码方式
(when (fboundp 'set-charset-priority)
(set-charset-priority 'unicode))
(prefer-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(setq locale-coding-system 'utf-8)
(setq-default buffer-file-coding-system 'utf-8)
其他默认值
出现错误时开启调试
#+BEGIN~SRC~ emacs-lisp
(setq-default debug-on-error t)
#+END~SRC~
scratch Buffer的默认值
#+BEGIN~SRC~ emacs-lisp
(setq-default initial-scratch-message nil)
#+END~SRC~
关闭启动动画
#+BEGIN~SRC~ emacs-lisp
(setq-default inhibit-startup-screen t)
#+END~SRC~
关闭自动保存和备份
#+BEGIN~SRC~ emacs-lisp
(setq-default auto-save-default nil create-lockfiles nil
make-backup-files nil history-length 500)
#+END~SRC~
yes-or-no to y-or-n
#+BEGIN~SRC~ emacs-lisp
(fset \’yes-or-no-p \’y-or-n-p)
#+END~SRC~
包管理
初始化
(setq package-enable-at-startup nil)
(package-initialize)
设置包下载地址
(setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/")
("melpa" . "http://elpa.emacs-china.org/melpa/")
("org" . "http://elpa.emacs-china.org/org/")))
[]{#use-package}
use-package 管理插件配置
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(eval-when-compile
(require 'use-package))
(setq use-package-verbose nil)
(setq use-package-always-ensure t)
每次载入最新的版本
(setq load-prefer-newer t)
自动编译安装的插件
(use-package auto-compile
:defer t
:config (auto-compile-on-load-mode))
外观增强
主题
(use-package gruvbox-theme
:config
(load-theme 'gruvbox-dark-medium t))
字体
(defun +my/better-font()
(interactive)
;; english font
(if (display-graphic-p)
(progn
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d" "Source Code Pro" 17)) ;; 11 13 17 19 23
;; chinese font
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font) charset (font-spec :family "WenQuanYi Micro Hei Mono" :size 20)))) ;; 14 16 20 22 28
))
(defun +my|init-font(frame)
(with-selected-frame frame
(if (display-graphic-p)