Posts emacs配置初步
Post
Cancel

emacs配置初步

前言

仅仅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 打开窗口显示所有buffer
  • C-x b 切换到相应buffer
  • C-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设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    ;; 关闭工具栏,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 从文件中加载特性:

1
2
3
4
5
6
7
8
9
    (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) ,如:

1
    (add-hook 'emacs-lisp-mode-hook 'show-paren-mode)

该命令表示在启动 emacs-lisp-mode 的时候才会启动 show-paren-mode , 用于括号匹配显示。

由于默认的插件源非常有限(可以通过 M-x package-list-packages 查看), 可以通过外在的插件源头来更新,常用的有MELPA ,包含了3000左右的插件, 可以通过以下命令进行设置:

1
2
3
4
    (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进行安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    ;; 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:

1
2
3
4
5
    (setq auto-mode-alist
          (append
           '(("\\.js\\'" . js2-mode))
           '(("\\.html\\'" . web-mode))
           auto-mode-alist))

自带的一些特性介绍:

常用插件介绍

安装完插件后可以通过 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-= 进行内容的选中,该快捷键需要绑定:
    1
    
        (global-set-key (kbd "C-=") 'er/expand-region)
    
  • Occur-mode :能够查询字符并对字符所在行显示,可在显示的缓存内进行编辑, M-s o进行选中内容的搜索显示,按 =e可进行编辑模式
  • iedit-mode :能够对选中的内容进行共同编辑,选中内容后,通过 M-s e 进入iedit模式(快捷键需要绑定):
    1
    
        (global-set-key (kbd "M-s e") 'iedit-mode)
    
  • Evil :实现了Vim的大部分功能
  • Cask :Cask能够辅助Packages的管理,安装后会在 .emacs.d 目录下生成 Cask 文件,集成Packages, 通过 cask install 自动安装包, 之后结合 pallet 进行包的安装管理即可,需要在初始化文件中设置:
    1
    2
    
        require 'cask "<path-to-cask>/cask.el")
        (cask-initialize)    ; 类似于 package-initialize
    
  • pallet :基于Cask的包管理工具,可实现不同版本Emacs的包管理等功能,配置过程如下:
    1
    2
    3
    4
    5
    6
    7
    8
    
        ;; 激活过程
        (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和键绑定,简单使用如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
        (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
This post is licensed under CC BY 4.0 by the author.