目的
使用emacs
的同学肯定需要将常用的指令绑定到熟悉的按键上,对于刚接手的初学者来说,按键的定制是一个难题.
解决这个难题,便是本文的目的.
如果你以前使用过
vim
,那么map leader
应该是再熟悉不过的了,下面的内容就是类似leader
这样的操作定义和使用.
假设
在这里我们做一些假设,确定读者的等级.
- 假设: 读者对lisp语言有一定的了解. (没有,对这篇文章也没有影响,但如果有,那就会理解更深)
- 假设: 读者有一定的编程经验,可以对一些常见的术语敏感
- 假设: 读者有一定的编辑器使用经验,可以对通用术语有一些了解
配置步骤
Note: 保证自己的emacs按键不会被外部应用(如:窗口管理器)阻截,如果是这样,案件不生效也不是奇怪的事情.
基础知识
emacs
中的按键是分键位映射图
的,所谓键位映射图其实就是不同的引导键
而已,亦即引导键所定义的命名按键命令空间
.
键位映射图在emacs中主要分为两类:
全局映射图
对所有模式的编辑缓冲区都生效的键位映射图
局部映射图
对具体编辑模式起作用的键位映射图,如: org-mode,c-mode, java-mode等.
键位映射图规则:
- emacs根据输入,先判断当前缓冲区的编辑模式,寻找局部键位映射图
- 如果没有找到局部键位映射图,那么寻找全局键位映射图
- 再没有找到,则按键未定义
- 如果两种键位图冲突,则使用局部键位屏蔽全局键位
遇到任何不会的地方,请在线使用emacs的帮助文档寻求帮助:
C-h
f command-name
C-h
k [ret]key-of-command
具体配置步骤
工具: emacs 内置函数
(define-prefix-command ‘my-leader)
配置想要的映射键位图,就是之前所说
leader
按键,引导后面一系列按键组合.(define-key keymap “keystroke” ‘command-name)
将快捷键绑定到
leader
按键后,即和键位图绑定(global-set-key “keystroke” ‘command-name)
定义全局快捷键
(local-set-key “keystroke” ‘command-name)
定义局部于模式的快捷键
注意: “keystroke”中的
Ctrl
和Alt
使用'\C'
和'\M'
表示
如果是(kbd)函数,那么可以使用'C'
和'M'
表示
本文只介绍三种配置步骤:(配置内容只是例子,具体按个人要求配置)
- 第一种:通用隐含与leader按键绑定配置
(define-prefix-command 'my-map)
(global-set-key (kbd "M-n") 'my-map)
(global-set-key (kbd "M-n b") 'find-file)
- 第二种:明确与leader按键绑定配置
(define-prefix-command 'my-map)
(global-set-key (kbd "M-n") 'my-map)
(define-key my-map (kbd "b") 'find-file)
- 第三种:多重leader按键嵌套配置
(define-prefix-command 'my-first-map)
(define-prefix-command 'my-second-map)
(define-prefix-command 'my-thried-map)
(global-set-key (kbd "M-n") 'my-first-map)
(define-key my-first-map (kbd "M-p") 'my-second-map)
(define-key my-first-map (kbd "M-k") 'my-thried-map)
(define-key my-thried-map (kbd "!") 'save-file)
(define-key my-thried-map (kbd "k") 'write-file)
(define-key my-thried-map (kbd "kj")
(lambda ()
(interative)
(save-buffer)
(kill-emacs)))
结语:
emacs中的leader前置按键比vim确实要强大一些,可以定义多个,不过量力而行,毕竟我们不会使用那么多.(如果你使用相应模式的键位,那定义一个,就再好不过了)
具体生效的位置不用多提:
1. 如果你使用别人如github: purcell/emacs.d那么请在README下完成配置
2. 如果自己裸配,那么在$HOME
目录中的.emacs
完成配置
3. 如果使用新版本的emacs,一般在.emacs.d/init.el
或者.emacs.d/custom.el
中配置
参考:
Emacs Wiki
Emacs 中文网
Emacs 帮助手册
王银的主页