Emacs 快捷键配置方案

Emacs 的快捷键和 Vim 的快捷键是编辑器中的两坐高山,其中 Emacs 的快捷键主要有四类。

四大类型

  • 全局快捷键

    (global-set-key (kdb "a") 'command)
    
  • 全局映射键

    (define-key key-translation-map (kbd "a") (kdb "b"))
    
  • Major-mode 局部快捷键

    (local-set-key (kdb "a") 'command)
    
  • Minor-mode 局部快捷键

    (define-key your-minor-mode-map (kbd "a") 'command)
    

删除、禁用快捷键

(global/local-unset-key (kbd "a"))
(global/local-set-key (kbd "a") 'ignore/nil)

键冲突与解决

最方便的解决方案是找一个空置的 prefix 键,先映射到这个键上,再全局或者局部设置它。

先映射到空闲键上

(define-key key-translation-map (kbd "a") (kbd "M-g A"))

全局或者局部设置

(global/local-set-key (kbd "M-g A") 'command)

快捷键优先级

key-translation-map : 最高级,就是把这个键的意义改变了,想使用原来的快捷键,要重新进行绑定

minor-mode-map : 二级,只在 minor mode 激活时启作用,其它时候会被其它的快捷键覆盖掉

local-set-key : 三级,在 major mode 中启作用

global-set-key : 最弱的级别,但是也是最简单的键绑定方式

设置局域快捷键

(defun f-python-mode ()
    (local-set-key (kbd "C-x C-e")'f-python-shell-send-line)
    (local-set-key (kbd "M-g C-y") 'f-python-shell-send-line))
(add-hook 'python-mode-hook 'f-python-mode)

注意 当键进行重新绑定后,还应该将之前的功能重新绑定到另一个键上。

Minor Mode Map

(define-minor-mode visual-mode
  :init-value nil
  :global t
  :keymap (make-sparse-keymap)
  (if (not visual-mode) (setq cursor-type 'bar)
    (setq cursor-type 'box)))
(define-key visual-mode-map (kbd "h") 'mark-paragraph)

定义之后,可以利用 define-key 来设置当前快捷键。然后在需要启用 Visual mode 的时候可以启用这个 minor mode 的相关快捷键。

Author
Tags
总结(3) Emacs(2) org mode(4) 年度清单(2) 读书清单(2) 电影清单(2) 电视清单(2) Python(3) 学习计划(1) 子弹笔记(1) 手帐体系(1) 时间管理(1) 时间使用效率(1) 形意拳(1) 知识管理(1) 简历(1) 技能水平(1) 生活(1) 减法生活(1) 阅读(1) 阅读分组(1) org(1) docx(1) markdown(2) cmder(1) 图床(1) jsdelivr(1) github(1) 安卓系统(1) 手动更新手机系统(1) post link(1) post path(1) hexo(2) hugo(2) GitHub Pages(1) travis(1) 自动部署博客(1) presentation(1) gcc(1) g++(1) 默认表格(1) 复杂表格(1) multimd table(1) google adsense(1) evil(1) surround(1) librime(2) emacs-rime(1) liberime(1) dot(1) graphviz(1) use-sub-superscripts(1) ditaa(1) Evil Multiple cursors(1) turn evil mode off(1) modifier keys(1) keymap(1) super(1) hyper(1) install Emacs(1) Mac OS(1) keybinds(1) clocktable(1) coding system(1) image library(1) keybind(1) spacemacs(1) org babel(1) homebrew(1) dd(1) diskutil(1) tmux(1) xcode(1) xcrun(1) node-gyp(1) tar(1) tree(1) pacman(1) plantuml(1) find(1) grep(2) du(1) apt-get(1) apt(1) regex(1) wildcard(1) zsh(1) gdb(1) lsof(1) netstat(1) rebase(2) workflow(1) 工作流(1) .gitignore(1) postbuffer(1) hung up(1) merge(1) cache(1) reset(1) Git(1) command(1) submodule(1) GitHub Pull Request(1) pr(1) Matplotlib(1) beautifusoup(1) 下载小说(1) SOLID(1) Leetcode(2) 透视表(1) read_excel()(1) pandas(1) conda(1) django(1) markdown-deux(1) mysql(1) oracle(1) 模糊查询(1) logging level(1) reflex(1) Field(1) Maven(1) Selenium(1) 下拉框(1) select into(1) insert into select(1) CAST(1) CONVERT(1) timestamp(1) concat(1) concat_ws(1) group_concat(1) union(1) grant privileges(1) 重置 root 密码(1) 报错 10060(1) 清理连接数(1) create user(1) set password(1) exists(1) in(1) markdown-it(1) emoji(1) tasks(1) valine(1) Code 504(1) Hugo(1) theme(1) substring(1) indexOf(1) RegExp(1) 定位节点(1) 正则匹配(1) async(1) 异步请求(1) css(2) layui(1) 滚动条(1) JavaScript(1)