如何更改 bash 历史完成以完成已经在线的内容?

几个月前,我发现了一个命令,当我按下向上箭头时,我的 bash 历史会自动完成已经在行上的内容:

$ vim fi

$ vim file.py

我想把这个设置在我的新电脑上,因为它节省了很多时间,当保持一个大的历史。问题是,我无论如何也想不起来它是在哪里被提到的,而且阅读无穷无尽的 bash 参考资料和教程也无济于事。

有人知道命令吗?

51739 次浏览

大概是这样

# ~/.inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward

或者相当于,

# ~/.bashrc
if [[ $- == *i* ]]
then
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
fi

(if 语句检查交互模式)

通常,Up 和 Down 分别绑定到 Readline 函数 previous-historynext-history。我更喜欢将 PgUp/PgDn 绑定到这些函数,而不是取代 Up/Down 的常规操作。

# ~/.inputrc
"\e[5~": history-search-backward
"\e[6~": history-search-forward

修改 ~/.inputrc后,重新启动 shell 或使用 Ctrl + XCtrl + R告诉它重新读取 ~/.inputrc


顺便说一句,如果你在找相关文件:

Bash 使用 GNU Readline 库作为 shell 提示符和历史记录。

您可能需要启用 bash 完成。

将军

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

查看以上文件是否有任何来源于 /etc/bash_completion

. /etc/bash_completion

如果 /etc/bash___completion不是来源于任何上述文件,您将需要添加到其中之一。

如果您希望机器上的所有 bash 用户都有 bash 完成,请从 /etc/bash.bashrc源代码 /etc/bash_completion

如果只有您需要 bash 完成,请从 ~/.bashrc中源代码 /etc/bash_completion

使用 ohmyzsh,在你的 。 zhrc中使用这个:

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

重新加载、 source ~/.zshrc或重新启动终端。

资料来源: https://superuser.com/a/418299/71680

更新. inputrc,包括以下内容:

"\C-[OA": history-search-backward
"\C-[[A": history-search-backward


"\C-[OB": history-search-forward
"\C-[[B": history-search-forward

如果 set enable-keypad on和某些 st (无吸力的单端子)用户一样位于 ~/.inputrc中,请注意箭头键处于小键盘模式。Ubuntu 附带了这个有用的 /usr/share/doc/bash/inputrc.arrows:

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

所以我不确定你是否需要所有的东西,但是在你的 ~/.inputrc中加入:

# Arrow keys in keypad mode
"\C-[OA": history-search-backward
"\C-[OB": history-search-forward
"\C-[OC": forward-char
"\C-[OD": backward-char


# Arrow keys in ANSI mode
"\C-[[A": history-search-backward
"\C-[[B": history-search-forward
"\C-[[C": forward-char
"\C-[[D": backward-char

这也是关于同样的话题: 我的光标键不工作和这个 特殊键