emacs安裝及配置

目錄

  1. 平臺
  2. 安裝
  3. 基本配置
    1. 配置文件結構
    2. elpa倉庫管理
    3. 主題配色
    4. 字體顯示配置(解決中文卡頓
  4. 插件配置
    1. markdown
      1. 簡介
      2. markdown-mode
      3. markdown-toc
      4. org導出md
      5. notepad++預覽md
    2. evil
      1. 簡介
      2. evil
    3. atuo-complete
    4. yasnippet
      1. 簡介
      2. 配置
      3. snippet
    5. semx/ido
    6. window-numbering
    7. solarized-theme
    8. fci-mode
    9. erc
      1. 登錄emacs ERC
      2. 註冊帳號
      3. 登錄帳號
  5. 參考

平臺

  • 操做系統: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項添加字符串值html

      名稱 數據
      HOME D:\emacs-26.1
    • 增長環境變量D:\emacs-26.1node

基本配置

配置文件結構

  1. 參考purcell的配置。
  2. 結構圖
    img
  3. 結構詳解
    • lisp/
      插件配置文件目錄,配置文件命名格式爲init-xxx.el
    • site-lisp/
      放置沒法從elpa或其它倉庫獲取的第三方插件,本目錄及其子目錄須在啓動時添加到load-path
    • init.el
      初始化load-path,初始化elpa,加載各插件配置文件等
  4. 個人配置
    https://files.cnblogs.com/files/eat-and-die/emacs%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.7z

elpa倉庫管理

  1. 倉庫源
  2. 配置文件init-elpa.el
    • 添加倉庫git

      (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
    • 初始化packagegithub

      (package-initialize)

主題配色

  1. solarized-theme
  2. molokai
    • 主題地址
      https://github.com/hbin/molokai-theme
    • 配置文件init-mythememarkdown

      (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. 編碼設置ide

    (set-language-environment 'UTF-8)
    (set-locale-environment "UTF-8")
    (set-default-coding-systems 'utf-8)
  3. 中英文等寬設置函數

    (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. 下載地址
  2. 配置

    (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")
  3. 快捷指令

    指令 功能
    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按序開始,不能直接從其它級別開始。
      不然,沒法正確生成目錄樹
  4. 快捷指令

    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))
  3. 導出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)
  2. 快捷方式

    指令 功能
    C-z emacs模式和evil模式間切換
  3. 問題
    • 在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")
  3. 問題
    • 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
  2. 典型例子

    # contributor: test <test@qq.com>
    # name: __---__
    # --
    __${init}__
  3. 「# –」以上內容均爲註釋,這些註釋可能爲指令或者元數據
    • 指令格式相似 「# property: value」
    • 若沒有 「# –」 則,全部的內容均被當作snippet內容
  4. 指令
    • # 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
  5. 模板語法
    • 純文本
      任意文本均可以做爲模板的內容,除了美圓符$和反引號`外,一般它們被認爲是純文本。若須要能夠
      用反斜槓\轉義美圓符和反引號,若要使用雙反斜槓\\,則每一個反斜槓須要一個反斜槓轉義,即\\\\
    • 嵌入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}
  6. 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)
  3. 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)
  4. 操做
    • 左右方向鍵選擇待選項
    • 使用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
相關文章
相關標籤/搜索