我说的是您在命令行/终端中使用的键盘快捷键。
示例:Ctrl+c杀死进程、Ctrl+d注销、Ctrl+z将进程发送到后台...等。
我测试了一些,发现它们既不是终端(即,,gnome-terminal
)特定的,也不是外壳(即,)特定的,它们甚至可以在s 上工作。xterm
konsole
bash
zsh
tty
所以,我想知道:
- 谁提供这些捷径?
- 我如何列出和修改/定义它们?
答案1
从http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/
命令编辑快捷键
- Ctrl+ a– 转到命令行的开头
- Ctrl+ e– 转到命令行末尾
- Ctrl+ k– 删除从光标到命令行末尾
- Ctrl+ u– 删除从光标到命令行开头的内容
- Ctrl+ w– 删除从光标到单词开头(即向后删除一个单词)
- Ctrl+ y– 将使用删除快捷方式之一(例如上面的快捷方式)剪切的单词或文本粘贴到光标后
- Ctrl+ xx– 在命令行开头和当前光标位置之间移动(然后再返回)
- Alt+ b– 向后移动一个单词(或转到光标当前所在单词的开头)
- Alt+ f– 向前移动一个单词(或转到光标当前所在单词的末尾)
- Alt+ d– 删除到从光标处开始的单词末尾(如果光标位于单词开头,则删除整个单词)
- Alt+ c– 大写到从光标处开始的单词末尾(如果光标位于单词开头,则为整个单词)
- Alt+ u– 从光标到词尾变为大写
- Alt+ l– 从光标到词尾变为小写
- Alt+ t– 将当前单词与前一个单词交换
- Ctrl+ f– 向前移动一个字符
- Ctrl+ b– 向后移动一个字符
- Ctrl+ d– 删除光标下的字符
- Ctrl+ h– 删除光标前的字符
- Ctrl+ t– 将光标下的字符与前一个字符交换
命令调用快捷键
- Ctrl+ r– 向后搜索历史记录
- Ctrl+ g– 退出历史搜索模式
- Ctrl+ p– 历史记录中的上一个命令(即回溯命令历史记录)
- Ctrl+ n– 历史记录中的下一个命令(即向前浏览命令历史记录)
- Alt+ .– 使用上一个命令的最后一个单词
命令控制快捷键
- Ctrl+ l– 清除屏幕
- Ctrl+ s– 停止输出到屏幕(对于长时间运行的详细命令)
- Ctrl+ q– 允许输出到屏幕(如果之前使用上面的命令停止)
- Ctrl+ c– 终止命令
- Ctrl+ z– 暂停/停止命令
Bash Bang (!) 命令
重击还有一些方便的功能,使用! (砰)让你可以做一些时髦的事情巴什命令。
- !!– 运行最后一个命令
- !废话– 运行以“blah”开头的最新命令(例如!ls)
- !等等:p– 打印出以下命令!废话将运行(还将其添加为命令历史记录中的最新命令)
- !$– 上一个命令的最后一个单词(与Alt + .)
- !$:p– 打印出这个词!$会替代
- !*– 除最后一个单词之外的上一个命令(例如,如果您键入 '找到 some_file.txt /', 然后!*会给你'找到 some_file.txt')
- !*:p– 打印出什么!*会替代
答案2
内核的终端驱动程序 ( termios
) 解释可以键入的特殊键,以向进程发送信号、发送文件结尾、擦除字符等。这是基本的 Unix 内核功能,在大多数 Unix 和 Linux 实现上非常相似。
该stty
命令显示或设置termios
特殊字符以及终端线路驱动程序的其他参数。
调用stty -a
以查看特殊字符和其他“终端线设置”的当前值。在下面的示例中,您可以看到intr
is Ctrl+ C、eof
is Ctrl+ D、susp
is Ctrl+ Z。 (我删除了其他输出以仅显示特殊字符设置):
stty -a
GNU/Linux 上的特殊字符:
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
stty -a
FreeBSD 上的特殊字符:
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
要更改特殊字符的值,例如,将中断字符从Ctrl+更改C为Ctrl+E调用,stty
如下所示(^E
实际上是两个字符,扬抑符 ( ^
) 后跟字母E
):
stty intr '^E'
stty
有关详细信息,请参阅和 的手册页termios
。在 GNU/Linux 上,您还可以查看tty_ioctl
手册页。
笔记:
键intr
(默认为Ctrl+ C)实际上并不杀死进程,而是导致内核SIGINT
向进程组内的所有进程发送中断信号 ( )。进程可能会安排捕获或忽略信号,但大多数进程将终止,这是默认行为。
Ctrl+使您注销的原因d是终端线路驱动程序在 shell 的标准输入上发送 EOF(文件结束)。当 shell 在其标准输入上收到文件结尾时,它就会退出。