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


10

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

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

我测试了一些,发现他们既不是终端(即gnome-terminalxtermkonsole)具体也不壳(即bashzsh)具体的,他们甚至在工作tty秒。

所以,我想知道:

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

尝试bind -p列出,以至于help bind其他
Costas

Answers:


10

内核的终端驱动程序(termios)解释可以键入的特殊键,以将信号发送给进程,发送文件结尾,擦除字符等。这是Unix内核的基本功能,在大多数Unix和Linux实现中非常相似。

stty命令显示或设置termios特殊字符以及终端线驱动器的其他参数。

调用stty -a以查看特殊字符的当前值和其他“终端线设置”。在下面的例子,你可以看到,intrCtrl+ CeofCtrl+ DsuspCtrl+ 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+ 更改CCtrl+ E调用,stty如下所示(^E实际上是两个字符,circumflex(^)后跟字母E):

stty intr '^E'

欲了解更多信息,请参阅手册页sttytermios。在GNU / Linux上,您也可以查看tty_ioctl手册页。

笔记:

intr键(Ctrl+ C默认情况下),实际上并没有杀死进程,但导致内核发出中断信号(SIGINT进程组内)的所有进程。进程可以安排捕获或忽略信号,但是大多数进程将终止,这是默认行为。

Ctrl+ d将您注销的原因是因为终端行驱动程序在外壳程序的标准输入上发送了EOF(文件结尾)。当外壳在其标准输入上收到文件末尾时,外壳退出。


@Sukminder,在FreeBSD上,POSIX -a选项已添加到中stty
RobertL

我试过了stty intr '^E'它可以工作(设置),但是暂时且仅适用于当前终端/ tty。如何在全球范围内永久更改?
潘迪

我认为最好的方法是stty在$ HOME / .profile或$ HOME / .bashrc或其他一些Shell启动初始化文件中调用。
RobertL

我试过了:它可以在终端机上工作,但是在tty
Pandya

您尝试了什么,看到了什么,这是什么意思tty?也许这可能是一个新问题?
RobertL

14

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(!)命令

Bash还具有一些使用!的便捷功能。(bang),让您可以使用bash命令执行一些时髦的操作。

  • !! –运行最后一个命令
  • !blah –运行以'blah'开头的最新命令(例如!ls)
  • !blah:p –输出将运行!blah的命令(也将其添加为命令历史记录中的最新命令)
  • !$ –上一个命令的最后一个字(与Alt +相同)。
  • !$:p –打印出!$可以替代的单词
  • !* –除最后一个单词外的上一个命令(例如,如果键入' find some_file.txt / ',那么!*将为您提供' find some_file.txt ')
  • !*:p –打印出!*可以替代的内容

1
@Sukminder不,Ctrl + S会停止输出。您似乎将其与Ctrl + Z混淆了。
吉尔斯(Gillles)“所以-别再邪恶了”

另请参阅:Emacs。
Erich

真好!并且有到达的方式^U,即stty -a对SIGKILL定义在Linux上显示,从庆典?最好不要定义readline内容(也许通过第三个mod / meta键)。我认为它只是被ctrl + u readline绑定遮盖了?
纽约
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.