
看到一篇不错的文章，保存一下。

但你知道 macOS 也能使用类似 Bash 上用的快捷键来操作文本么😃，甚至还能自定义。别光被标题的 Emacs 吓到，操作极为舒适，特别在你交换 Control(⌃) 与 Caps Lock(⇪) 键之后。

## 自带组合

其实快捷键列表这东西有好多途径可以获得

- 官方文档 <https://support.apple.com/zh-cn/HT201236>
- 知乎问题 <https://www.zhihu.com/question/20021861>
- CMD 软件 <https://www.mediaatelier.com/CheatSheet/>
- 键盘贴膜 <http://jcpal.com.cn/CN/ProductList23d0.html>

这些快捷键是系统全局可用的，这就是 macOS 相比 Windows 的一大优势，只要快捷键没有被覆盖，那么在各个软件可输入文字的地方都可以使用。

官方文档里其实已经很全面了，不过眼尖的用户可能会注意到 `文稿快捷键` 一节有一些 `Control` 开头的操作，没错 他们就是本文的重点啦，Emacs 快捷键。

这里把它们中一些常用的抽出来方便阅读：


| key      | 描述                                       |
| -------- | ------------------------------------------ |
| Ctrl + f | 向前移动一个字符                           |
| Ctrl + b | 向后移动一个字符                           |
| Ctrl + a | 移至行或段落的开头                         |
| Ctrl + e | 移至行或段落的末尾                         |
| Ctrl + p | 上移一行                                   |
| Ctrl + n | 下移一行                                   |
| Ctrl + d | 删除插入点右边的字符。也可以使用 Fn-Delete |
| Ctrl + h | 删除插入点左边的字符。也可以使用 Delete 键 |
| Ctrl + k | 删除插入点与行或段落末尾处之间的文本       |
| Ctrl + o | 在插入点后新插入一行                       |

不过由于是在浏览器中，可能会和其他快捷键冲突，列表中的不一定全都有效。但你也可以打开一个文本编辑器 (TextEdit.app) 尝试尝试，这个肯定没问题。

## 终端组合

不论是 Bash 还是 Zsh，你的常用终端也有不少自带的快捷键。

你可以在这些地方找到一些 Cheatsheet

<https://github.com/fliptheweb/bash-shortcuts-cheat-sheet>
<https://kapeli.com/cheat_sheets/Bash_Shortcuts.docset/Contents/Resources/Documents/index>
除了 Shell 自带的以外你还能通过 bind bindkey 添加自定义快捷键，这里不展开了。

可是似乎有点太多了，比如移动光标这个简单的操作就有那么多。Bash 中移动光标的操作
Bash 中移动光标的操作

| key      | 描述                       |
| -------- | -------------------------- |
| Ctrl + f | 向前移动一个字符           |
| Ctrl + b | 向后移动一个字符           |
| Ctrl + a | 移至行或段落的开头         |
| Ctrl + e | 移至行或段落的末尾         |
| Ctrl + d | 删除插入点右边的字符       |
| Ctrl + h | 删除插入点左边的字符       |
| Ctrl + u | 删除到行首                 |
| Ctrl + k | 删除到行尾                 |
| Alt + b  | 向前移动一个单词           |
| Alt + f  | 向后移动一个单词           |
| Ctrl + w | 向前删除到词首             |
| Alt + d  | 向后删除到词尾             |
| Ctrl + y | 把之前删除掉的文本粘贴回来 |

这里我把和 macOS 自带对快捷键一致的命令用粗体标示出来了。
可以看到有不少相似点，比如他们都是使用 `Ctrl + a` 移动到行首。
但是也增加了一些新的常用操作，比如`Alt + b` 移动到单词边界，这对命令编辑很有帮助。

## 自定义组合

但能不能更强一点！当然能！比如把他们俩结合起来，让全系统都能拥有流畅的文本编辑体验。

- <https://github.com/ttscoff/KeyBindings>
- <https://gist.github.com/trusktr/1e5e516df4e8032cbc3d>

基本做法就几步  

- 创建或打开 `~/Library/KeyBindings/DefaultKeyBinding.dict` 
- 文件贴入 <https://github.com/ttscoff/KeyBindings/blob/master/DefaultKeyBinding.dict> 的内容
- 修改里面的内容以符合自己的需求
- 修改会生效在重启或新开应用上
这里我给出一个我自己的配置，包含如下功能

| key                        | 描述                                 |
| -------------------------- | ------------------------------------ |
| Ctrl + f                   | 向前移动一个字符                     |
| Ctrl + b                   | 向后移动一个字符                     |
| Ctrl + a                   | 移至行或段落的开头                   |
| Ctrl + e                   | 移至行或段落的末尾                   |
| Ctrl + Shift⇧ + a          | 选择到行或段落的开头                 |
| Ctrl + Shift⇧ + e          | 选择到行或段落的末尾                 |
| Ctrl + p                   | 移动到上一行                         |
| Ctrl + n                   | 移动到下一行                         |
| Ctrl + d                   | 删除插入点右边的字符                 |
| Ctrl + h                   | 删除插入点左边的字符                 |
| Ctrl + u                   | 删除插入点与行或段落开头处之间的文本 |
| Ctrl + k                   | 删除插入点与行或段落末尾处之间的文本 |
| Ctrl + o                   | 在插入点后新插入一行                 |
| Option⌥ + o                | 在下面开启新的一行                   |
| Option⌥ + Shift⇧ + o       | 在上面开启新的一行                   |
| Command⌘ + Enter↵          | 在下面开启新的一行                   |
| Command⌘ + Shift⇧ + Enter↵ | 在上面开启新的一行                   |
| Ctrl + w                   | 向前删除到词首                       |
| Option⌥ + d                | 向后删除到词尾                       |
| Option⌥ + y                | 拷贝一行或一段                       |
| Ctrl + y                   | 把之前删除掉的文本粘贴回来           |
| Option⌥ + w                | 选择一个单词                         |
| Option⌥ + s                | 选择一整个行或段落                   |
| Option⌥ + 1                | 设置一个标记                         |
| Option⌥ + 2                | 跳转到这个标记                       |

## 交换按键

Mac 键盘，或者说几乎所有键盘布局，都把 Ctrl(Control) 键放置在了左下角。当然还有一些笔记本会让 Fn 键占据左下角的位置，把 Ctrl 挤开。个人极力吐槽这种配置，不能盲按。

不过在我把 Ctrl 和 CapsLock 键交换位置以后，世界变了🤯

小拇指按 Ctrl 键的体验比左手掌侧面按的体验好太多了！

那么大个 CapsLock 键却不怎么使用（除了在 Mac 上切换中英文输入法）简直是浪费。
![图 1](https://jimyag.com/posts/macos-key-configuration/index/pic_1671462423751.png)  

