命令行编辑

命令行编辑由Readline库提供,该库被多个不同的程序使用,包括Bash。在使用交互式shell时,默认情况下会启用命令行编辑,除非在shell调用时提供了–noediting选项。当使用read内置命令的-e选项时(参见Bash内置命令),也会使用行编辑。默认情况下,行编辑命令类似于Emacs的命令。还可以使用vi风格的行编辑界面。可以随时使用set内置命令的-o emacs或-o vi选项来启用行编辑(参见Set内置命令),或者使用set的+o emacs或+o vi选项来禁用行编辑。

默认是Readline库提供的方式即set -o emacs,可以使用set -o vi修改为vi模式,使用set -o emacs切换回默认的emacs模式。

基础命令

(Depending on your configuration, the Backspace key might be set to delete the character to the left of the cursor and the DEL key set to delete the character underneath the cursor, like C-d, rather than the character to the left of the cursor.)

快捷键 说明
Ctrl+b 光标向后移动一格,和←效果一致
Ctrl+f 光标向前移动一格,和→效果一致
Ctrl+d 删除光标上的一格
Backspace 删除光标之前的一格
Delete 删除光标上的一格

移动

快捷键 说明
Ctrl+a 移动到行首
Ctrl+e 移动到行尾
Alt+b 移动到前一个单词的开头
Alt+f 移动到下一个单词的开头
Alt+d 删除光标到下一个单词的开头
Alt+Backspace 删除光标到前一个单词的开头
Ctrl+l 清除当前屏幕,重新显示当前行在屏幕顶部
Ctrl+k 删除光标到行结尾的内容,包含光标所在格的内容
Alt+Delete 未测试出来
Ctrl+w 删除光标到前一个空格,不包含这个空格
Ctrl+y  
Alt+y  

传递参数给Readline命令

上文已经介绍了一些常用的命令,这些命令可以接受参数,比如Ctrl+d前文描述其效果是删除光标所在格的内容,实际上Ctrl+d命令的默认参数是1,表示删除光标所在格的内容。通过Alt+3可以给Ctrl+d传递3作为参数,此时Ctrl+d命令的效果是删除光标所在格之后的3个格传递参数给Readline命令,是两个步骤:第一步通过Alt+参数命令输出参数,第二步按下命令键执行带上参数的命令。在两步之间可以使用esc键取消第一步的参数输入

  1. Ctrl+k也是可以接收一个参数-,这个时候Ctrl+k命令的效果是删除光标到行首的内容,包含光标所在格的内容
  2. Ctrl+d可以接收参数

Readline 配置文件

但是Readline命令还有更多的命令,这些命令可以通过Readline配置文件来配置。 //todo