Emacs配置初步
date:2019-04-20
Table of Contents
前言
僅僅emacs入門,先主要將emacs作爲一個文本編輯器來使用,學習路線主要參考子龍山人21天emacs ,
現在完成了前十天的基礎內容
現就其中的一些基本操作以及基本 packages
的功能作簡單的介紹。
個人配置可參考配置地址
基本快捷鍵
這裏只記錄自己常用的一些快捷鍵:
光標切換:
C-f,C-b,C-n,C-p
分別爲向前,後,上,下移動C-a,C-e
分別爲移動到行首,行末S-a,S-e
分別爲隔行向上,下移動S->,S-<
分別爲移動到文首,文末S-g g
爲移動到指定行C-l
切換光標所在頁面的位置:中央-上端-下端-原位置
buffer切換:
C-x C-b
打開窗口顯示所有bufferC-x b
切換到相應bufferC-x k
刪除相應buffer
窗口相關:
C-x 0
關閉當前窗口C-x 1
只顯示當前窗口C-x 2
水平復制當前窗口C-x 3
垂直複製當前窗口C-x 4 f
在垂直打開的窗口中打開對應文件C-x 4 d
在垂直打開的窗口中打開對應文件夾(dired-mode)C-x o
在各個窗口間切換光標
區域編輯:
C-S-Space
開始選中模式,移動光標進行選擇C-k
刪除光標後行C-/
撤銷操作C-w
區域刪除M-w
複製C-y
粘貼
文件相關:
C-x C-f
在當前文件夾內查找文件C-x C-s
保存當前文件C-x s
依次保存buffer中的文件
其他功能相關:
C-h,v,f
尋找快捷鍵,變量,函數的幫助信息C-g
關閉命令M-x xxx
打開相關的xxx
mode或者函數功能等C-x C-e
執行某段lisp代碼
Lisp相關:
lisp
語言可參考官方快速指南
改變默認的Emacs設置
;; 關閉工具欄,tool-bar-mode 即爲一個 Minor Mode
(tool-bar-mode -1)
;; 開啓全局Company補全
(global-company-mode 1)
;; 關閉備份文件(~後綴的文件)
(setq make-backup-files nil)
;; 關閉文件滑動控件
(scroll-bar-mode -1)
;; 顯示行號
(global-linum-mode 1)
;; 更改光標的樣式
(setq cursor-type 'bar)
;; 關閉啓動幫助畫面
(setq inhibit-splash-screen 1)
;; 更改顯示字體大小 16pt
(set-face-attribute 'default nil :height 160)
;; 快速打開配置文件
(defun open-init-file()
(interactive)
(find-file "~/.emacs.d/init.el"))
;; 這一行代碼,將函數 open-init-file 綁定到 <f2> 鍵上
(global-set-key (kbd "<f2>") 'open-init-file)
;; 設置選中背景顏色爲藍色
(set-face-background 'region "blue")
;; 將emacs的刪除功能設置與其他圖形界面編輯器相同
(delete-selection-mode 1)
;; 高亮當前行
(global-hl-line-mode 1)
;; 關閉默認的嗶嗶提示音
(setq ring-bell-function 'ignore)
特性相關
特性的加載與Package的安裝
Emacs自帶了很多特性,常見的有 recentf:用於打開最近打開的文件
等,
此外還可以通過其他插件安裝多種特性。
常用 require
命令進行特性加載, require
從文件中加載特性:
(require 'recentf)
;; 打開該mode
(recentf-mode 1)
;; 設置最大的文件數目
(setq recentf-max-menu-item 10)
;; 設置快捷鍵
(global-set-key (kbd "C-x C-r") 'recentf-open-files)
;; 默認文本解碼設置爲UTF-8
(set-language-environment "UTF-8")
對於不同模塊可以根據類型進行模塊式設計,如在文件夾下的 lisp
目錄下,
添加不同類型的模塊,但需要在初始化文件 init.el
中添加文件位置:
(add-to-list 'load-path "~/.emacs.d/lisp/")
,同時在模塊文件中
添加 (provide 'modul-name)
,
則在 init.el
文件便可通過 =require=命令調用
在開啓有些mode的時候往往會在某些條件下才會觸發,這是會用到鉤子(hook) ,如:
(add-hook 'emacs-lisp-mode-hook 'show-paren-mode)
該命令表示在啓動 emacs-lisp-mode
的時候纔會啓動 show-paren-mode
,
用於括號匹配顯示。
由於默認的插件源非常有限(可以通過 M-x package-list-packages
查看),
可以通過外在的插件源頭來更新,常用的有MELPA ,包含了3000左右的插件,
可以通過以下命令進行設置:
(require 'package)
(package-initialize)
(setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/")
("melpa" . "http://elpa.emacs-china.org/melpa/"))))
在得到的 packages
表單裏可以通過 I
來標記安裝, D
來標記刪除,
U
來標記更新,標記完成後需要通過 X
來確認。
最後通過以下命令對Packages List內的Packages進行安裝:
;; cl - Common Lisp Extension
(require 'cl)
;; Add Packages
(defvar my/packages '(
;; --- Auto-completion ---
company
;; --- Better Editor ---
hungry-delete
swiper
counsel
smartparens
;; --- Major Mode ---
js2-mode
;; --- Minor Mode ---
nodejs-repl
exec-path-from-shell
;; --- Themes ---
monokai-theme
;; solarized-theme
) "Default packages")
(setq package-selected-packages my/packages)
(defun my/packages-installed-p ()
(loop for pkg in my/packages
when (not (package-installed-p pkg)) do (return nil)
finally (return t)))
(unless (my/packages-installed-p)
(message "%s" "Refreshing package database...")
(package-refresh-contents)
(dolist (pkg my/packages)
(when (not (package-installed-p pkg))
(package-install pkg))))
基本特性介紹
這裏就對一些Emacs自帶的特性作簡單的介紹:
Major Mode: 整體文件模式對應的模式類型,有text-mode, special-mode, prog-mode
Minor Mode: 增強性功能的Mode
可以定義對不同的文件開啓不同的Major Mode:
(setq auto-mode-alist
(append
'(("\\.js\\'" . js2-mode))
'(("\\.html\\'" . web-mode))
auto-mode-alist))
自帶的一些特性介紹:
recentf
: 近期打開的文件, 更改快捷鍵後C-c C-r
打開最近文件cl
: Common Lisp Extension- Org-mode相關:參照個人博客Org-mode介紹
常用插件介紹
安裝完插件後可以通過 M-x customize-group
選擇對應的插名稱進行功能設置
- company :提供了各種自動補全的功能, 將其應用於全局:=(global-company-mode t)= ,company依靠
company-backends
進行補全,如需要對Python進行補全的話,則需要在模式鉤子下激活anaconda-mode
,
當前的 backends
值可以通過 C-h v company-backends
得到
- hungry-delete :一次性用於刪除多個空格或者換行
- swiper :該插件其實集成了
swiper
,counsel
,Ivy
三個插件,Ivy用於補全操作(用於文件查找匹配等),swiper用於當前文件查找字符所在位置,counsel實現了更多功能並與emacs命令進行匹配,能夠更好的應用Ivy,
C-s
可實現查找功能,同樣命令可在搜索結果之間進行切換
-
smartparens :用於顯示對應匹配的括號
-
popwin-mode :將光標移動到新開的窗口中
-
Hippie :提供更多補全功能,如其他buffer中的字符的補全
-
Dired :提供了強大的文件管理相關的功能,
C-x d
可以進入Dired-mode
,可以在該模式下進行文件操作,可以通過C-x C-q
進行編輯操作(如重命名),其他便捷操作有:+
:創建目錄C
:拷貝D
:刪除d
:標記刪除u
:取消標記x
:執行標記
-
expand-region :能夠通過
C-=
進行內容的選中,該快捷鍵需要綁定:(global-set-key (kbd "C-=") 'er/expand-region)
-
Occur-mode :能夠查詢字符並對字符所在行顯示,可在顯示的緩存內進行編輯,
M-s o
進行選中內容的搜索顯示,按 =e可進行編輯模式 -
iedit-mode :能夠對選中的內容進行共同編輯,選中內容後,通過
M-s e
進入iedit模式(快捷鍵需要綁定):(global-set-key (kbd "M-s e") 'iedit-mode)
-
Evil :實現了Vim的大部分功能
-
Cask :Cask能夠輔助Packages的管理,安裝後會在
.emacs.d
目錄下生成Cask
文件,集成Packages, 通過cask install
自動安裝包, 之後結合pallet
進行包的安裝管理即可,需要在初始化文件中設置:require 'cask "<path-to-cask>/cask.el") (cask-initialize) ; 類似於 package-initialize
-
pallet :基於Cask的包管理工具,可實現不同版本Emacs的包管理等功能,配置過程如下:
;; 激活過程 (pallet-mode) (pallet-init) ; 在.emacs.d 中生成一個 Cask 文件, 寫入源與現有包 (pallet-install) ; 將 elpa 中的 package 拷貝到.Cask/<you version>/elpa 目錄中 ;; 配置過程 (require 'pallet) (pallet-mode t) ; 激活 pallet, 在安裝包時將 Cask 文件寫入相應信息
-
use-package :更安全的加載包的方式,部分包出錯的時候不會讓整個Emacs停止工作,可以對各個包的配置進行集中設置,方便實現auto-load和鍵綁定,簡單使用如下:
(use-package package-name :commands (global-company-mode) ;;auto-load實現 ;;快捷鍵設置 :bind (("M-s O" . moccur) :map isearch-mode-map ("M-o" . isearch-moccur) ("M-O" . isearch-moccur-all)) :init (setq my-var1 "xxx") :config (progn (setq my-var2 "xxx") (setq my-var3 "xxx") ) :defer t )
-
JavaScript相關:
- js2-mode :js2-mode主要提供了:語法高亮+語法檢查器(Linter)
- nodejs-repl :可用於執行緩衝區的代碼,需要系統自身已經安裝了NodeJS
- js2-refactor :用於重構JavaScript的Minor Mode,可以通過
C-c C-m
進行功能前綴的加入
-
web-mode :常用的編輯前端代碼的Major Mode