我想知道是否有一个功能可以让您为命令以及已经输入的参数获取历史记录完成(通过按 UP 和 DOWN),这将非常方便sudo
,例如:
$ sudo vim [PRESSING UP]
--> 将完成sudo vim .zshrc
(如果这是我的最后一个命令),但如果我再次 [PRESS UP] 我会完成:
$ sudo ls /
(如果这是我的倒数第二个 sudo 命令)
但我想要的是完成sudo vim
仅以开头的命令。
我希望这是有道理的。
这听起来类似于类似“鱼”的建议。这是Zsh 的实现。与向上箭头相比,此类事情通常更适合tab
或完成。Ctrl-D
还有一个predict-on
Zsh 小部件,它会自动填充您上次键入的类似命令。值得尝试:
% autoload predict-on; predict-on
这是功能的限制up-line-or-search
。打开man zshzle
并搜索up-line-or-search
。此命令仅使用第一个单词来搜索历史记录。
在up
/down
键上进行“全行”搜索
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down
您可以history-beginning-search-backward
为此使用小部件。它在历史记录中向后搜索与当前行相同开头的行,直到光标位置。您可以替换当前绑定或创建一个新绑定,例如在ShiftUp(在我的机器上它映射到^[[a
):
bindkey '^[[a' history-beginning-search-backward
您可能还想绑定history-beginning-search-backward
小部件,以便能够在历史记录中双向移动(ShiftDown在^[[b
我的机器上):
bindkey '^[[b' history-beginning-search-forward