emacs配置

2017年的最后一篇博客emacs配置关于这份配置主要内容:改善emacs的默认行为,c和c++的配置,使用evil插件,hexo+org的博客配置更新时间:2017-12-30初始化启动的第一步,我们需要初始化插件(package-initialize)设置加载配置文件的路径(add-to-list 'load-path (expand-file-name "site-lisp" user
摘要由CSDN通过智能技术生成

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)
    
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值