Sublemacs Pro

Sublemacs Pro 是一个在 Sublime Text 里模拟 Emacs 快捷键的插件,这对于像我一样对 Emacs 中毒的用户而言非常有用:它极大的降低了我适应快捷键所需要的成本。

官方主页:https://github.com/grundprinzip/sublemacspro

安装方法

安装好 Sublime Text, 配置一下 Package Control ,然后按快捷键 Control+Shift+p 呼出命令菜单,选择Install Package,等出现 Package 菜单,再输入 “sublemacspro” 安装即可。其他的插件也建议用类似的方式安装,多尝试插件,用好 Sublime Text 很简单。

快捷键列表

这里收集了常用的快捷键列表,跟Emacs的快捷键大同小异!其他的可以由读者自己去体验。

为了遵循 Emacs 的快捷键称呼习惯,统一用C代表Control键,M代表Alt键,S代表Shift键。例如C-S-p代表Control+Shift+p组合键。
快捷键 功能
M-w 复制当前行到kill ring
C-w 把当前行剪切入kill ring
C-y 从kill ring取回(yank)内容
C-Y 或者 M-y 从Kill ring中选择内容并取回
C-x r d 以及 C-x r t 矩形剪切和插入
C-o 插入一个新行
C-aC-e 跳转到物理行首和物理行末
alt-a 跳到逻辑行首
C-sC-r 增量式查找和向后查找
C-g 退出任一种overlay,例如snippet mode
M-/ 补全
M-z zap-to-char,从当前光标处一直删除到所指定的字符
C-x, C-b 打开缓冲区列表
C-x, ( 以及 C-x, ) 开始和结束宏定义
C-x, e 执行宏
C-M-[ 以及 C-M-] 段落导航
C-x r SPC [寄存器名] 把当前光标的位置寄存
C-x r j [寄存器名] 跳转到某个寄存器寄存的光标位置
C-x r s [寄存器名] 把文本放入寄存器
C-x r i [寄存器名] 把文本从寄存器取出

不足

目前发现的问题有:

  • C-@ 并不能打开选择模式,因为 Sublime Text 并没有提供这个功能。目前只能通过 C-M-方向键 来进行选择。
  • C-x 0 并不能关闭当前窗口。作者说这个问题暂时没法解决
  • C-j 在 Sublime Text 中本身的功能是合并行,并不是换行功能。
  • C-x [C-x ] 不能分别跳转到缓冲区的开头和结尾,但可以直接通过 M-S-,M-S-. 来实现。
  • M-% 打开的不是查找替换功能,而是把当前窗口平均分成四个。而查找替换功能则绑定到了 M-r
  • 在Emacs下 M-x 才是命令模式的快捷键,但 Sublime Text 下打开命令模式的快捷键是更难按的 C-S-p (对Dvorak键盘布局用户的伤害更大)。

我的修改

针对上面的不足,我做了一点调整:

  1. C-j 绑定到换行命令,反正我很少用到合并行的功能;
  2. C-x [C-x ] 分别与跳转到缓冲区的开头和结尾的命令绑定;
  3. M-% 绑定到查找替换命令;
  4. M-x 绑定到命令模式。

将下面的代码粘贴到 Key Bindings - User 里即可。注意放在[]之间:

1
2
3
4
5
6
7
8
9
10
11
// Emacs like manipulator
{ "keys": ["ctrl+j"], "command": "insert", "args": {"characters": "\n"} },
{ "keys": ["home"], "command": "move_to", "args": {"to": "hardbol", "extend": false}},
{ "keys": ["end"], "command": "move_to", "args": {"to": "hardeol", "extend": false}},
{ "keys": ["shift+home"], "command": "move_to", "args": {"to": "hardbol", "extend": true}},
{ "keys": ["shift+end"], "command": "move_to", "args": {"to": "hardeol", "extend": true}},
{ "keys": ["ctrl+x", "["], "command": "move_to", "args": {"to": "bof", "extend": false}},
{ "keys": ["ctrl+x", "]"], "command": "move_to", "args": {"to": "eof", "extend": false}},
{ "keys": ["alt+shift+5"], "command": "show_panel", "args": {"panel": "replace"} },
{ "keys": ["alt+x"], "command": "show_overlay", "args": {"overlay": "command_palette"} },
{ "keys": ["ctrl+x","ctrl+n"], "command": "new_file" },

Comments