命令行的键盘快捷键是什么?

命令行的键盘快捷键是什么?

我说的是您在命令行/终端中使用的键盘快捷键。

示例:Ctrl+c杀死进程、Ctrl+d注销、Ctrl+z将进程发送到后台...等。

我测试了一些,发现它们既不是终端(即,,gnome-terminal)特定的,也不是外壳(即,)特定的,它们甚至可以在s 上工作。xtermkonsolebashzshtty

所以,我想知道:

  • 谁提供这些捷径?
  • 我如何列出和修改/定义它们?

答案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以查看特殊字符和其他“终端线设置”的当前值。在下面的示例中,您可以看到intris Ctrl+ Ceofis Ctrl+ Dsuspis Ctrl+ Z。 (我删除了其他输出以仅显示特殊字符设置):

stty -aGNU/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 -aFreeBSD 上的特殊字符:

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+更改CCtrl+E调用,stty如下所示(^E实际上是两个字符,扬抑符 ( ^) 后跟字母E):

stty intr '^E'

stty有关详细信息,请参阅和 的手册页termios。在 GNU/Linux 上,您还可以查看tty_ioctl手册页。

笔记:

intr(默认为Ctrl+ C)实际上并不杀死进程,而是导致内核SIGINT向进程组内的所有进程发送中断信号 ( )。进程可能会安排捕获或忽略信号,但大多数进程将终止,这是默认行为。

Ctrl+使您注销的原因d是终端线路驱动程序在 shell 的标准输入上发送 EOF(文件结束)。当 shell 在其标准输入上收到文件结尾时,它就会退出。

相关内容