如何更改bash历史记录完成以完成已在线上的操作?

时间:2009-06-23 01:13:13

标签: linux bash shell bash-completion

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

$ vim fi

$ vim file.py

我想在我的新电脑上设置它,因为它可以节省大量的时间来保持一个伟大的历史。问题是,我不能为我的生活记住它被提到的地方,阅读无尽的bash引用和教程不幸也没有帮助。

有人知道命令吗?

5 个答案:

答案 0 :(得分:218)

可能类似

# ~/.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 + X Ctrl + R 告诉它重新阅读~/.inputrc


顺便说一句,如果您正在寻找相关文档:

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

答案 1 :(得分:4)

使用以下内容更新.inputrc:

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

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

答案 2 :(得分:1)

使用ohmyzsh,在 .zshrc

中使用此功能
bindkey '^[OA' history-search-backward
bindkey '^[OB' history-search-forward

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

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

答案 3 :(得分:1)

如果set enable-keypad on中的~/.inputrc与某些st(suckless simple terminal)用户一样,请注意箭头键处于键盘模式。 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

这也是同一主题:My cursor keys do not work以及此xterm: special keys

答案 4 :(得分:-3)

您可能需要启用bash完成功能。

检查

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

查看上述任何文件是否来源/etc/bash_completion。即。

. /etc/bash_completion

如果/etc/bash___completion未被上述任何文件采购,则需要将其添加到其中一个文件中。

如果您希望计算机上的所有bash用户都完成bash,请从/etc/bash_completion获取/etc/bash.bashrc

如果只是您想要bash完成,请从您的/etc/bash_completion中获取~/.bashrc