像 matlab/octave 这样的程序以及我相信的许多其他程序允许您开始输入一个命令,然后点击Up调用以输入的字符开头的最后一个命令。
常见的 Linux shellbash
不会这样做。有没有其他 shell 可以做到这一点?我不是在问如何找出最后一个命令,而是在问是否有更友好的 shell。
答案1
当您取消注释以下内容时,Bash 允许这样做.inputrc
:
# alternate mappings for up/down arrows to search the history
"\e[B": history-search-forward
"\e[A": history-search-backward
答案2
当你配置 Bash 时,它确实会这样做。输入以下内容~/.inputrc
:
"\e[B": history-search-forward
"\e[A": history-search-backward
然后,向上和向下箭头键将使用当前命令的前缀直到光标处搜索历史记录。
这些函数默认是未绑定的。还有其他历史搜索命令,请参阅这里。
答案3
您想使用正向和反向历史搜索。从 bash(1):
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.
只需按 ^R 并开始输入,它就会完全按照您的要求执行。按 ^R 多次可浏览结果。
答案4
是的,有多种 shell 内置了此功能。其中一种 shell 称为 zsh(Z shell)。
zsh 有一个称为增量历史搜索的功能,它允许您通过键入要调用的命令的前几个字符,然后按向上箭头键来搜索命令历史记录。它将搜索您的历史记录并向您显示以您键入的字符开头的最新命令。
您还可以使用 Ctrl-R 键绑定来逐步搜索命令历史记录。
要使用 zsh,您需要在系统上安装它。您可以在 Ubuntu/Debian 上运行以下命令来安装它:
sudo apt-get install zsh
安装后,您可以通过运行以下命令切换到 zsh:
chsh -s $(which zsh)
您也可以在 bash 中启用它,将以下两行放入您的~/.bashrc
:
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
这将启用 bash 中的增量历史记录搜索功能,以便您可以通过键入要调用的命令的前几个字符然后按向上箭头键来搜索命令历史记录。
将这些行添加到 .bashrc 文件后,您可以注销并重新登录,或者运行以下命令:
source ~/.bashrc
您还可以使用其他 shell,例如 fish,它们也具有类似的功能。
您可以检查一下,看看是否喜欢它的功能,然后决定是否要将其用作主要 shell。