目录

  1. 平台
  2. 安装
  3. 基本配置
  1. 配置文件结构
  2. elpa仓库管理
  3. 主题配色
  4. 字体显示配置(解决中文卡顿)
  1. 插件配置
  1. markdown
  1. 简介
  2. markdown-mode
  3. markdown-toc
  4. org导出md
  5. notepad++预览md
  1. evil
  1. 简介
  2. evil
  1. atuo-complete
  2. yasnippet
  1. 简介
  2. 配置
  3. snippet
  1. semx/ido
  2. window-numbering
  3. solarized-theme
  4. fci-mode
  5. erc
  1. 登陆emacs ERC
  2. 注册账号
  3. 登陆账号
  1. 参考


平台

  • 操作系统:win10 64位
  • emacs版本:emacs 26.1 64位


安装

  1. 官网
    http://www.gnu.org/software/emacs/
  2. 国内镜像
    http://mirrors.nju.edu.cn/gnu/emacs/windows
  3. 安装包
    emacs-26.1-x86_64.zip
  4. 安装
    解压并重命名 emacs-26.1-x86_64.zip 到所需安装位置。
    如"D:\emacs-26.1",后面均以此为例。
  5. 配置HOME目录
  • 在注册表中添加"计算机\HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs"项
  • 为Emacs项添加字符串值

名称

数据

HOME

D:\emacs-26.1

  • 增加环境变量D:\emacs-26.1


基本配置


配置文件结构

  1. 参考purcell的配置。
  2. 结构图
  3. 结构详解
  • lisp/
    插件配置文件目录,配置文件命名格式为init-xxx.el
  • site-lisp/
    放置无法从elpa或其它仓库获取的第三方插件,本目录及其子目录须在启动时添加到load-path
  • init.el
    初始化load-path,初始化elpa,加载各插件配置文件等
  1. 我的配置


elpa仓库管理

  1. 仓库源
  1. 配置文件init-elpa.el
  • 添加仓库
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
  • 初始化package
(package-initialize)


主题配色

  1. solarized-theme
(add-to-list 'custom-theme-load-path "your path")
(load-theme 'solarized t)
  1. molokai
(setq molokai-theme-kit t)
(add-to-list 'custom-theme-load-path "your path")
(load-theme 'molokai t)


字体显示配置(解决中文卡顿)

  1. dejavu-fonts
    https://dejavu-fonts.github.io/Download.html
  2. 编码设置
(set-language-environment 'UTF-8)
(set-locale-environment "UTF-8")
(set-default-coding-systems 'utf-8)
  1. 中英文等宽设置
(defun set-font (english chinese english-size chinese-size)
   (set-face-attribute 'default nil :font
                       (format   "%s:pixelsize=%d"  english english-size))
   (dolist (charset '(kana han symbol cjk-misc bopomofo))
     (set-fontset-font (frame-parameter nil 'font) charset
                       (font-spec :family chinese :size chinese-size))))

(set-font   "Dejavu Sans Mono" "WenQuanYi Zen Hei Mono" 14 14)


插件配置

以下所有插件均可使用以下命令安装:

M-x package-install RET xxx RET


markdown


简介

markdown-mode支持emacs markdown编辑,效果预览需要pandoc工具支持。
插件markdown-toc用于自动生成目录。


markdown-mode

  1. 下载地址
  1. 配置
(autoload 'markdown-mode "markdown-mode"
         "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.text\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

(autoload 'gfm-mode "markdown-mode"
        "Major mode for editing GitHub Flavored Markdown files" t)
(add-to-list 'auto-mode-alist '("README\\.md\\'" . gfm-mode))

;; 需安装pandoc
(setq markdown-command "D:/Program/Pandoc/pandoc.exe")
  1. 快捷指令

指令

功能

C-c C-s b

加粗

C-c C-s i

倾斜

C-c C-s c(C)

code

C-c C-s 1~6(或 h)

标题

C-c C-s f

脚注

C-c C-l

插入链接

C-c C-i

插入图片

C-c C-s C-h

查询帮助

C-c C-s t

插入表格

指令(with pandoc)

功能

C-c C-c m

显示对应html代码

C-c C-c p

preview

C-c C-c e

export

C-c C-c v

export & preview

C-c C-c o

open

C-c C-c C-h

help


markdown-toc

  1. 下载地址
    https://github.com/ardumont/markdown-toc
  2. 配置
    暂时无需配置
  3. 问题
  • 标题不能以数字开头(包括中文“〇”)命名。
    否则,生成的目录链接无法跳转
  • 标题必须从h1-h6按序开始,不能直接从其它级别开始。
    否则,无法正确生成目录树
  1. 快捷指令
M-x markdown-toc-generate-toc ;; 生成目录树
M-x markdown-toc-refresh-toc  ;; 更新目录树
M-x markdown-toc-delete-toc   ;; 删除目录树


org导出md

  1. org-mode支持markdown格式导出,而且不需要pandoc和markdown-toc。
    从操作性上来说org-mode要好一些,功能更加强大,所以我要弃markdown了。
  2. 配置方法
(eval-after-load "org" '(require 'ox-md nil t))
  1. 导出md方法
C-c C-e m


notepad++预览md

  1. notepad++ v7.6.1可支持markdown预览
  2. 插件->Plugins Admin…->MarkdownViewer++


evil


简介

模拟vi操作体验的emacs插件,写代码更爽。


evil

  1. 配置
(require 'evil)
(evil-mode 1)
  1. 快捷方式

指令

功能

C-z

emacs模式和evil模式间切换

  1. 问题
  • 在NORMAL和INSERT模式之间切换时,输入法不会自动切换。
    一个可能的解决方案: https://emacs-china.org/t/topic/3152 但我不喜。
    所以,暂时不用,什么时候官方支持什么时候用。


atuo-complete

  1. 简介
    自动补全工具
  2. 配置
(require 'auto-complete)
(require 'auto-complete-config)

(global-auto-complete-mode t)

;; 文本模式下启动补全功能
(add-to-list 'ac-modes 'text-mode)

(ac-config-default)

(setq ac-auto-start 4)

;; pos-tip 帮助闪烁
;;(require 'pos-tip)
;;(setq ac-quick-help-prefer-pos-tip t)

;; quick-help
(setq ac-use-quick-help t)
(setq ac-quick-help-delay 1.0)

(setq ac-dwim t)
(setq ac-trigger-commands
  (cons 'backward-delete-char-untabify ac-trigger-commands))

;; fuzzy
(setq ac-fuzzy-enable t)

;; menu
;;(setq ac-menu-height 12)
;;(set-face-background 'ac-candidate-face "lightgray")
;;(set-face-underline 'ac-candidate-face "darkgray")
;;(set-face-background 'ac-selection-face "steelblue")
  1. 问题
  • pos-tip在这个环境下效果很差,显示的帮助内容闪烁
  • auto-complete插件和company插件冲突,在弹出菜单时可能造成显示混乱
  • 模糊匹配fuzzy插件
(setq ac-fuzzy-enable t) ;; 不起作用
M-x ac-fuzzy-complete    ;; 可以起作用,但没用


yasnippet


简介

为C、C++、C#、Perl、Python等语言设置代码片段。


配置

(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)

(setq yas-snippet-dirs
  '("~/.emacs.d/Mysnippets"))

(yas-global-mode t)


snippet

  1. 创建snippet
C-c & C-n (M-x yas-new-snippet) ;; 创建新snippet
C-c C-c                         ;; 保存snippet
  1. 典型例子
# contributor: test <test@qq.com>
# name: __---__
# --
__${init}__
  1. “# –”以上内容均为注释,这些注释可能为指令或者元数据
  • 指令格式类似 “# property: value”
  • 若没有 “# –” 则,所有的内容均被当做snippet内容
  1. 指令
  • # key :snippet abbrev,这是最重要的指令,若不指定该指令,则无法触发展开指令
  • # name :snippet name,用一行描述snippet。
    好的描述可以让你方便的区别相似的snippets
  • # condition :snippet condition,若snippet有条件,
    当条件非nil时snippet会被展开
  • # group :snippet menu grouping,一个模式若有许多snippets,
    则可以把他们组织在一个group中,方便菜单栏中成组的显示,防止菜单栏变得太长
  • # expand-env :expand environment,为变量赋值的列表(类似于let的变量赋值),
    在展开代码段时,它可用于覆盖变量值
# note: 从官网说明获取,方便举例
# name: ASCII home
# expand-env: ((yas-indent-line 'fixed) (yas-wrap-around-region 'nil))
# --
                   welcome to my
               X      humble
              / \      home,
             /   \      $0
            /     \
           /-------\
           |       |
           |  +-+  |
           |  | |  |
           +--+-+--+
  • # binding :direct keybinding,你可以直接将展开snippet的指令绑定到普通的emacs按键
  • # type :snippet or command,若type指令被设置成了command,那么snippet的内容
    会以lisp代码的方式执行。若设置为snippet(默认为snippet),snippet内容会以其模板语法解释执行
  • # uuid :unique identifier,独立于name的唯一标识,若第二次加载的uuid和前次一样,则会以第二次为准
  • # contributor :snippet author
  1. 模板语法
  • 纯文本
    任意文本都可以作为模板的内容,除了美元符$和反引号`外,通常它们被认为是纯文本。若需要可以
    用反斜杠\转义美元符和反引号,若要使用双反斜杠\\,则每个反斜杠需要一个反斜杠转义,即\\\\
  • 嵌入elisp代码
    使用反引号`将elisp代码嵌入到模板中,代码会在snippet展开时执行
/*c-mode example,示例取自官网*/
#ifndef ${1:_`(upcase (file-name-nondirectory (file-name-sans-extension (buffer-file-name))))`_H_}
#define $1

$0

#endif /* $1 */
  • TAB位字段
    该字段可以让你使用TAB和S-TAB跳转。该字段格式为美元符$后面跟一个数字,
    $0有着exit point的特殊意义,表示退出snippet
  • 占位符字段
    制表位可以设置默认值,即占位符,语法如下
    ${N:default value}
  • Mirrors
    将带有占位符的制表位称为field,一个field可以有许多mirrors。
    当更新一个field,相应field所有的mirrors都会更新
begin {${1:test}}
   $0
end{$1}
  1. snippet实践
# -*- mode: snippet -*-
# name: main
# key: c_main
# --
/*${1: test} begin*/
/*
 C语言main函数snippet,输入c_main然后C-c k即可
*/
int main(${2:int args}, ${3:char *argv[]})
{
    $0;
    return 0;
}/*$1 end*/

注:若光标被导航到了$0,无法使用S-TAB向后导航了。


semx/ido

  1. 简介
    Ido是emacs内置插件;semx一款构建在Ido基础上,用于增强M-x功能的插件。
  2. ido配置
(ido-mode 1)
(setq ido-separator "\n")
(setq ido-enable-flex-matching t)
  1. semx配置
(require 'smex)

(smex-initialize)

(global-set-key (kbd "M-x") 'smex)
(global-set-key (kbd "M-X") 'smex-major-mode-commands)

;; This is your old M-x.
(global-set-key (kbd "C-c C-c M-x") 'execute-extended-command)
  1. 操作
  • 左右方向键选择待选项
  • 使用TAB键补全


window-numbering

  1. 简介
    快速在window间切换。
  2. 操作
M-number


solarized-theme

  1. 自定义配置
(require-package 'solarized-theme)
(require 'solarized)

(defun init-mytheme-light ()
    "My solarized child theme."
    (custom-theme-set-faces
    theme-name
    `(default ((,class (:background ,base03))))
    ))

(deftheme init-mytheme "The light variant of the Solarized color theme")
(create-solarized-theme 'light 'init-mytheme 'init-mytheme-light)


fci-mode

  1. 简介
    80列提示线
  2. 操作
M-x fci-mode


erc


登陆emacs ERC

emacs自带IRC客户端,启动指令:

M-x erc

minibuffer会提示操作步骤:

  1. IRC server : irc.freenode.net
  2. IRC port : 6667
  3. Nickname : "your name"
  4. Password : "your passwd"

注:步骤1-2可按默认配置,步骤3-4需自定义


注册账号

  1. 确认Nickname
    可使用指令"/nick"修改Nickname至满意为止,尽量避免使用社区、商标名
  2. 注册nick
    /msg NickServ REGISTER password youremail@example.com (注意大小写)
    freenode会向注册邮箱发送确认注册的信息的邮件,按操作执行即可


登陆账号

  1. 账号
    /nick "your name"
  2. 密码
    /msg NickServ identify "your passwd"


参考

  1. emacs编辑环境
    https://www.ibm.com/developerworks/cn/education/aix/emacs1/index.html
  2. elisp
    http://ergoemacs.org/emacs/elisp.html
  3. freenode
    http://freenode.net/kb/all