最开始使用 bash 的原生快捷键,即 readline 的 Emacs 模式快捷键,但奈何总是记不住,导致输入效率较低。后来改成将 bash 的输入模式改为 vi 模式(set -o vi),总算比较顺手,但是也有一些痛点不好解决:
- 到线上服务器查问题时,都是原始的 bash 配置,除非你每次都将当前登录的 shell 设置为 vi 模式输入,否则还是难以高效地输入
 
- 使用 mysql 等客户端工具时,它们都是默认使用 readline 的 Emacs 模式,此时也需要修改其输入模式
 
所以还是打算重新使用 bash 的原生快捷键模式,这篇文章主要是对这些快捷键进行总结。
 快捷键帮助
bash 的输入使用的是 readline 库,可以通过 man readline 获取其帮助信息。除了 bash 使用 readline 库,很多客户端工具都使用 readline 获取用户输入,所以这些快捷键同样适用于这些工具。
 光标移动
| 快捷键 | 
功能 | 
注意事项 | 
| Ctrl-a | 
移动到行首 | 
 | 
| Ctrl-e | 
移动到行尾 | 
 | 
| Ctrl-f | 
向前移动一个字符 | 
 | 
| Ctrl-b | 
向后移动一个字符 | 
 | 
| Alf-f | 
向前移动一个单词 | 
 | 
| Alf-b | 
向后移动一个单词 | 
 | 
| Ctrl-XX | 
在行首与当前字符之间来回移动 | 
 | 
 文本修改
| 快捷键 | 
功能 | 
注意事项 | 
| Ctrl-d | 
删除当前光标所在的字符(即往后删除) | 
如果当前没有字符,则等于输入 EOF | 
| Ctrl-h | 
删除当前光标所在的字符(即往前删除) | 
 | 
| Alt-d | 
删除当前光标所在之后的单词,并添加到 clipboard | 
 | 
| Ctrl-w | 
删除当前光标之前的单词,并添加到 clipboard | 
 | 
| Ctrl-u | 
删除从当前光标所在位置,直到行首,并添加到 clipboard | 
 | 
| Ctrl-k | 
删除从当前光标所在位置,直到行尾,并添加到 clipboard | 
 | 
| Ctrl-y | 
从 clipboard 获取内容 | 
 | 
| ctrl-t | 
交换当前光标和前一个字符 | 
 | 
| Alt-t | 
交换当前单词和前一个单词 | 
 | 
| Alt-u | 
将当前单词或其后的一个单词变为大写 | 
如果传递负参数,可以对前一个单词其作用,通过 Alt-- 传递负参数 | 
| Alt-l | 
将当前单词或其后的一个单词变为小写 | 
同上 | 
| Alt-c | 
将当前单词或其后的一个单词变为首字母大写 | 
同上 | 
 命令历史
| 快捷键 | 
功能 | 
注意事项 | 
| Ctrl-p | 
从命令历史中获取上一条命令 | 
 | 
| Ctrl-n | 
从命令历史中获取下一条命令 | 
 | 
| Alt-r | 
从命令历史中获取一条命令后,放弃对其的修改 | 
 | 
| Ctrl-r | 
从命令历史中往前搜索 | 
采用增量搜索模式 | 
| Ctrl-o | 
运行从 Ctrl-r 中搜索到的命令 | 
 | 
| Ctrl-g | 
退出命令搜索模式 | 
 | 
| Alt-Ctrl-y | 
获取上一个命令的第一个参数 | 
如果指定参数 n ,可以获取上一个命令的第 n 个参数,通过 Alt + n 插入参数 n | 
| Alt-. | 
获取上一个命令的最后一个参数 | 
 | 
 杂项
| 快捷键 | 
功能 | 
注意事项 | 
| Alt-# | 
插入注释 | 
 | 
| Ctrl-_ 或者 Ctrl-x Ctrl-u | 
undo 上一个按键 | 
 | 
| Ctlr-e | 
从 vi 模式切换为 emacs 模式 | 
 | 
| Alt-Ctlr-j | 
从 emacs 模式切换到 vi 模式 | 
 | 
 Reference
The Best Keyboard Shortcuts for Bash