Bash 终端常用快捷键总结

陪她去流浪 桃子 2016年07月10日 阅读次数:3559

Bash 中,使用的是 ReadLine 这个库来处理交互式输入。它支持两种键盘快捷键使用风格。默认是 Emacs,还有一种是 Vi。 使用 bash -o emacsbash -o vi 可以切换风格,但由于默认都是 emacs,所以接下来将只介绍 emacs 风格的快捷键。 若要了解更多,还请查看 bash 的帮助文档 READLINE 部分。大多数人都只听说过 emacs,而没有使用过,据说是神之编辑器(编辑器之神?),没想到每天都在接触着。

在我见过的人群中,在 Bash 命令的 输入/修改/删除 的操作上大概分三种类型:

  • 第一类: 只会使用 Backspace 向前删除键、方向键。如果一行命令的最前面有拼写错误,就狂按左方向键(或按着不放),然后修改。然后又狂按右方向键,回到结束,继续编辑。要取消命令的输入,就狂按backspace向前删除键。这是最最笨的一类(原谅我用了“笨”这个词),占比不低(就算是很多后端多年经验的程序员,也不免这样);
  • 第二类: 和第一类相比,多会一些常规的键盘快捷键,比如 HOME 回到行开始,END 回到行末。这一类看起来要聪明一点,不会显得特别小白。我本人也在这一阶段停留了非常之长久才逐渐成为第三类;
  • 第三类: 多数操作使用快捷键,一看就像是大神在操作,动作非常迅速。

接下来我就将列出一些特别方便的、平常用得多、能大大提高命令行编辑效率的的快捷键组合(不包含常规的按键,比如方向键,翻页键等)。

不是所有都能立即熟悉,以下是我不断完善的过程。

按键说明

  • C-x代表Ctrl + x
  • M-x代表Meta/Alt/Option + x
  • M-C-x代表Meta/Alt/Option + Ctrl + x
  • ⌘-x代表Command+x(macOS专用)
  • C-?代表Ctrl + Shift + /(因为 Shift + / 得到 ?,请不要杠)
  • 在部分 macOS 上,Backspace 键名被显示为 Delete

在 MacOS 上开启 Meta 键的方法

  • 如果是 Terminal.app:Preferences → Profiles → Keyboard → Use Option as Meta key。
  • 如果是 iTerm2.app:Preferences → Profiles → Keys → Option Key → Esc+。

快捷键表

BASH常用快捷键
分类按键助记说明
光标移动C-aanchor,^光标移动到行首
C-eend光标移动到行尾
C-fforward光标向前(右)移动一个字符
C-bbackward光标向后(左)移动一个字符
M-fforward光标向前(右)移动到单词结尾
M-bbackward光标向后(左)移动到单词开始
C-] 字符?光标向右移动到`字符`出现的位置,即搜索
M-C-] 字符?光标向左移动到`字符`出现的位置,即搜索
文本改变C-ddelete删除光标所在位置的一个字符(光标下有字符的时候)
C-hh(vim)删除光标所在位置前面的一个字符
C-wword删除光标所在位置前面的一个单词(以空白字符为边界)
M-Backspaceword删除光标所在位置前面的一个单词
M-ddelete删除光标所在位置的一个单词
C-ttranspose交换光标所在位置的两个字符的位置
M-ttranspose交换光标所在位置的两个单词的位置
C-u?(kill Until beginning)删除光标前面的所有字符。
存入剪贴板。
C-kkill删除从光标开始后面的所有字符。
存入剪贴板。
C-yyank粘贴剪贴板的内容。
M-uuppercase使光标下的单词变成全大写
M-llowercase使光标下的单词变成全小写
M-ccapital使光标下的单词首字母大写,即标题体
历史命令C-pprevious前一个命令,相当于按“上”键。
C-nnext后一个命令,相当于按“下”键。
C-rreverse搜索历史命令(从最近开始往回搜索)。
按下后输入字符开始搜索,然后按 ESC/TAB/方向键等授受。
按 Ctrl-G / Ctrl-C 取消搜索。
M-.
M-_
.(vim中的重复)插入上一个命令的最后一个参数到当前位置
撤销与重做C-_
C-x C-u
undo增量撤销最近一次的操作
这个可以用来撤销 TAB 展开的路径!非常好用。
M-rrevert当前行重置为最开始的内容
M-## comment注释掉当前命令并进入下一行。 等同于: 1. 按下 `^a`,回到行首 2. 输入`#`,注释当前行 3. 按下 `Enter`,进入下一行
自动补全TAB?尝试自动补全到输入
M-??直接显示可能的补全结果列表而不尝试补全到输入
M-**将 M-? 的所有结果插入到输入
M-gglob将光标下的单词作为 GLOB 正则(并追加一个 *)来扩展出可能的文件名
C-x *glob将光标下的单词作为 GLOB 正则(不会自动追加一个 *)来扩展出可能的文件名,插入输入
C-x gglob将光标下的单词作为 GLOB 正则(不会自动追加一个 *)来列举出可能的文件名,不会插入
其它C-l?(cLear)把当前行提到屏幕的最上端(类似清屏)
⌘k?(Clear Buffer)清屏
C-i?TAB
C-j?Enter
C-dend-of-file如果当前输入为空行,则返回 EOF 给输入,代表输入结束
C-vverbatim直接插入输入字符(取消特殊作用)。
比如 C-v 后按 TAB 可以输入制表符
C-x C-eeditor$EDITOR编辑器中编辑当前命令,然后执行
C-x C-vversion显示 bash 的版本

图示

这篇文章的内容已被作者标记为“过时”/“需要更新”/“不具参考意义”。

标签:linux · 总结 · Bash