当我在 shell 提示符下按向上键时,搜索具有相同前缀的上一个命令

当我在 shell 提示符下按向上键时,搜索具有相同前缀的上一个命令

来自 FreeBSD 世界,我希望让 Linux 终端表现得像 FreeBSD 一样,尤其是 9.1 版本,基本上当你cd在终端中输入并按“向上”箭头时,你可以浏览历史记录中的所有命令,cd这使你可以赢得很多时间。

我不知道如何在 Linux Debian 或 CentOS 中启用此功能,这迫使我输入整个内容,有人可以帮忙吗?

答案1

将以下内容添加到~/.inputrc

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

解释

~/.inputrc是配置文件GNU 阅读线。许多 shell,包括bashtcsh使用 readline 进行命令行编辑。上面两行将告诉 readline 在遇到向上箭头键 ( \e[A) 和向下箭头键 ( ) 的转义序列时调用其历史搜索功能。\e[B

答案2

实际情况是 FreeBSD 和 Linux 默认使用不同的 shell。 FreeBSD 默认为tcsh,它比过去的 bash 有更好的交互功能(但 bash 已经迎头赶上)但是脚本功能明显较差

获得您习惯的环境的最直接方法是将您的 shell 切换到 Linux 上的 tcsh。如果 tcsh 已在系统范围内安装(如果未安装,请要求系统管理员安装),请运行chsh -s tcsh以更改默认 shell。

或者,您可以设置 bash 以使用您习惯的命令。默认情况下,UpDown箭头会在历史记录中的所有命令之间导航,而不仅仅是以您键入的前缀开头的命令。要将其更改为您习惯的行为,请将以下行放入 bash 的初始化文件中,该文件位于.bashrc您的主目录中。运行. ~/.bashrc或启动一个新的 shell 来重新读取初始化文件。

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

转义序列是当您按箭头键时终端发送到 shell 的内容。Up可能是\eOA(escape, O, A) 或 ,\e[A具体取决于您的终端,对于 也类似Down

默认情况下,bash 提供不同的键绑定来搜索命令历史记录。您可以按Ctrl+ R,然后输入一些字符来搜索该行任意位置包含该子字符串的命令。按Ctrl+S前进而不是后退。搜索是渐进式的(即按您键入的方式搜索);Alt+PAlt+N为您提供非增量搜索。

您可以切换到 zsh,而不是 bash 和 tcsh,这具有其他 shell 中没有的一些简洁功能。 Zsh和 bash 一样默认有Ctrl+RCtrl+ 。S要像在 tcsh 中一样UpDown请将以下行放入~/.zshrc

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

如果您想在任何地方使用相同的 shell,您也可以在 FreeBSD 上使用 bash 或 zsh,前提是已安装该端口(再次询问您的系统管理员)。

答案3

tcsh适用于大多数 Linux 发行版。尝试安装该tcsh软件包,然后运行chsh -s /bin/tcsh以使其成为默认 shell。

相关内容