如何使用反向搜索命令(ctrl+r)向前搜索历史记录?

如何使用反向搜索命令(ctrl+r)向前搜索历史记录?

在 readline 手册中

# man readline

下面介绍如何向后搜索和向前搜索。

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

当我按下 ctrl+r 并输入“apt-get”时,我可以通过连续按下 ctrl+r 来执行反向搜索历史记录。但是当我按下 ctrl+s 时,终端并没有向前移动。我做错了什么吗?

另外 Meta 前缀“M-”代表什么键?

答案1

该序列C-s取自终端驱动程序,如您所见

stty -a | grep '\^S'

要释放序列以供 readline 使用,请将停止终端序列设置为其他序列,例如

stty stop ^J

或者将其完全删除

stty stop undef

此后C-s将在给定的终端中工作。

设置它~/.bashrc以使其在每个终端上工作。

正如前面所指出的,序列M-意味着Alt关键。

答案2

除了按照上面的建议分配不同的 TTY“停止”字符之外,如果您不打算使用它,您可以将其完全删除(我倾向于不这样做),如下所示:

$ stty stop undef

然后 readline 可以使用 control-s 进行前向搜索,并且不会因为添加了新的停止字符而出现任何奇怪的行为。

答案3

forward-search-history (Cs) 不起作用(尽管它在手册页中)。

“M-”代表 Alt 键修饰键。

答案4

请不要使用:

stty stop ^J

stty stop ^P

或者其他任何东西,因为这^J会给 ssh 带来很大的问题。(无论如何我都不知道为什么。)我登录后发现Enter反斜杠不起作用。或者我必须输入:

stty sane 
export TERM=linux

在我想打字之前

ssh root@192...

所以

stty stop ^P

同时解决了两个问题。

相关内容