在使用 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 可以查看所有的键盘绑定。
五、说明
-
Ctrl + v
Ctrl + v Ctrl + c 會出現 ^C 而不是中斷,Ctrl + v TAB 輸入 TAB 而不是命令
补全。 -
Ctrl + s 和 CTRL + q
Ctrl + s 类似于 Scroll Lock,停止屏幕滚动,例如在 cat xxx 时暂时的使用;
Ctrl + q 取消屏蔽锁定。 -
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 你的文件,不是很方便么?! -
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)”。