Shell 快捷键

在使用 Shell 进行 Linux 操作时,经常需要编辑大段的代码,如果仅仅使用键盘的
Delete 和 Backspace 键,那是一件非常折磨人的事情。我们以 Linux 默认的 Bash
Shell 为例,他可以设定为多种 Mode,使其操作习惯类似于一些熟悉的编辑器,比如
emacs 或 vi。

  • 列出所有 Mode

    set -o

  • 使用 vi 操作习惯來操作 Bash Shell

    set -o vi

  • 使用 emacs 的操作习惯来操作 Bash Shell,默认即为此 Mode

    set -o emacs

下面总结以下 Bash Shell 采用默认 emacs Mode 时可用的一些快捷键,能够极大提高
Shell 的操作效率。

一、CTRL 键绑定

命令 说明
Ctrl + s 锁住终端
Ctrl + q 解锁终端
Ctrl + l 清除终端
Ctrl + d 退出终端
——————— ———————————————————-
Ctrl + c 中止命令
Ctrl + z 挂起命令
——————— ———————————————————-
Ctrl + r 查找历史
Ctrl + p 显示上一条命令
Ctrl + n 显示下一条命令
——————— ———————————————————-
Ctrl + b 后移一个字符
Ctrl + f 前移一个字符
Ctrl + a 把光标移到行首
Ctrl + e 把光标移到行尾
ctrl + ← 光标移动到前一个单词开头
ctrl + → 光标移动到后一个单词结尾
Ctrl + x Ctrl + x 在 EOL 和当前位置移动光标
——————— ———————————————————-
Ctrl + h 删除前一字符
Ctrl + d 删除当前字符
Ctrl + w 删除单词到当前字符
Ctrl + k 删除当前字符到行末
Ctrl + u 删除行首到当前字符
——————— ———————————————————-
Ctrl + i 同 Tab
Ctrl + j 同 Enter
Ctrl + v CHAR 输入特殊字符
Ctrl + t 互换相邻两个字符
Ctrl + y 粘贴最后删除字符
Ctrl + x @ 显示所有的可用的主机名自动完成
Ctrl + x Ctrl + e 使用 vim 写入 script 一次执行

二、ALT 键绑定

命令 说明
Alt + b 后移一个单词
Alt + f 前移一个单词
———– ——————————————————————-
Alt + l 小写当前单词
Alt + u 大写当前单词
Alt + c 首字母大写当前单词
Alt + t 互换相邻的两个单词
Alt + d 从当前位置删除单词
Alt + ← 从当前位置向后删除
———– ——————————————————————-
Alt + r 重新调用命令
Alt + < 移动到历史的首行
Alt + > 移动到历史的末行
Alt + n 非增量地向前查询历史
Alt + p 非增量地向后查询历史
———– ——————————————————————-
Alt + . 插入最后一个参数
Alt + / 尝试自动完成文件名
Alt + ? 显示当前自动完成列表
Alt + * 插入所有可能自动完成

三、TAB 键的使用

这里 2T 表示按 TAB 键两次

命令 说明
2T 命令行补全
(string)2T 命令行补全
$2T 列出系统变量
=2T 列出当前目录
/2T 显示整个目录结构,包括隐藏文件
./2T 只显示子目录,包括隐藏目录
*2T 只显示子目录,不包括隐藏目录
@2T “/etc/hosts” 文件的条目
~2T “/etc/passwd” 文件中系统所有的当前用户

四、其他组合

命令 说明
Esc + . 插入最后一个参数
Esc + _ 插入最后一个参数
Esc + T 交换光标前面的两个单词

这些快捷键很多来自 GNU 的 readline 库,输入 bind -P 可以查看所有的键盘绑定。

五、说明

  1. Ctrl + v

    Ctrl + v Ctrl + c 會出現 ^C 而不是中斷,Ctrl + v TAB 輸入 TAB 而不是命令
    补全。

  2. Ctrl + s 和 CTRL + q

    Ctrl + s 类似于 Scroll Lock,停止屏幕滚动,例如在 cat xxx 时暂时的使用;
    Ctrl + q 取消屏蔽锁定。

  3. Ctrl + z 和 Ctrl + C 区别

    Ctrl + Z 和 Ctrl + c 都是中断命令,但是他们的作用却不一样。Ctrl + c 是强制
    中断程序的执行,而 Ctrl + z 则是将任务中断,但是此任务并没有结束,他仍然在进程中他只
    是维持挂起的状态,用户可以使用 fg/bg 操作继续前台或后台的任务。fg 命令重新启动前台被
    中断的任务,bg 命令把被中断的任务放在后台执行。例如:当你 vi 一个文件时,如果需要用
    shell 执行别的操作,但是你又不打算关闭 vi,因为你得存盘退出,你可以简单的按下
    Ctrl + z,shell 会将 vi 进程挂起,当你结束了那个 shell 操作之后,你可以用 fg
    命令继续 vi 你的文件,不是很方便么?!

  4. Gnome Terminal 下的使用

    如果使用 Gnome 下的终端窗口 gnome-teminal,上面的 Gnu Shell 快捷键会跟
    Gnome 的窗口快捷键有冲突。那么你需要做如下配置,在 gnome-terminal 的菜单栏中选
    “Edit” -> “Keyboard Shortcuts …” 打开 “Keyboard Shortcuts” 对话框,并勾
    选下面两个复选项 “Disable all menu access keys (such as Alt+f to open
    File menu)”、”Disable menu shortcut key (F10 by default)”。

参考资料