如何更改bash历史记录的完成情况以完成生产线中已有的内容?


133

几个月前,我发现了一个命令,该命令使我的bash历史记录在按向上箭头时自动完成了:

$ vim fi

$ vim file.py

我想在我的新计算机上进行设置,因为在保存历史记录时可以节省很多时间。问题是我一生都无法记住它的提及之处,不幸的是,无休止的bash参考资料和教程的阅读也无济于事。

有人知道命令吗?

Answers:


222

大概像

#〜/ .inputrc
“ \ e [A”:向后搜索历史
“ \ e [B”:历史搜索

或等效地,

#〜/ .bashrc
如果[[$-== * i *]]
然后
    绑定'“ \ e [A”:history-search-backward'
    绑定'“ \ e [B”:历史搜索-转发'
科幻

(if语句检查交互模式)

通常,向上和向下分别绑定到Readline函数previous-historynext-history。我更喜欢将PgUp / PgDn绑定到这些功能,而不是替换正常的Up / Down操作。

#〜/ .inputrc
“ \ e [5〜”:向后搜索历史
“ \ e [6〜”:历史搜索

修改后~/.inputrc,重新启动Shell或使用Ctrl+ XCtrl+ R使其重新读取~/.inputrc


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

Bash使用GNU Readline库获取shell提示和历史记录。


感谢您的回答。这听起来确实很熟悉,但不幸的是对我不起作用。将其放置在.inputrc中不会改变任何内容,而将其放置在.bashrc中可以阻止箭头执行任何操作。有任何想法吗?
blokkie 2009年

没关系。history-complete- *不存在;仅历史搜索*功能存在。谢谢!
blokkie 2009年

嗯,我显然打错了那里的前两个示例……不过最后一个是正确的。我会解决的。
短暂的

@ user1037114:这是它本身的问题,您应该在自己的帖子中提问。
kamaradclimber

这在bash中使用vi模式为我固定了向上/向下箭头。注意,我必须点击“ Esc”(命令模式)才能工作。
克里斯

5

使用以下命令更新.inputrc:

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

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

4
这些钥匙是什么?
克里斯

我不知道这些键的具体含义,但是当在X11上使用tmux和st终端时,上下键没有进行历史搜索时,此答案为我修复了此功能。
razzintown

1
@razzintown为ST,你可能有set enable-keypad ondel关键工作正常(常见问题解答)。当键盘上的箭头键是"\C-[OA""\C-[OB"(和"\C-[OC""\C-[OD")时。我在下面发布了一个答案以澄清这一点。
MauricioRobayo

@Chris这些是键盘模式的向上和向下箭头键,以及ANSI模式的向上和向下箭头键。看下面我的回答。
MauricioRobayo

3

如果set enable-keypad on~/.inputrc是某些st(无吮吸简单终端)用户所喜欢的用户,请注意箭头键处于键盘模式。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

这也是同一主题:我的光标键不起作用,并且xterm也是如此:特殊键



-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


2
制表符的完成效果很好,但与历史记录调用不同,这是原始海报要求的。
–'Ephemient
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.