【发布时间】:2010-11-05 00:52:16
【问题描述】:
几个月前我发现了一个命令,当按下向上箭头时,我的 bash 历史记录自动完成在线上的内容:
$ vim fi
按 ↑
$ vim file.py
我想在我的新计算机上进行设置,因为它在保存大量历史记录时可以节省大量时间。问题是我一生都记不起它在哪里被提及,不幸的是,阅读无休止的 bash 参考资料和教程也无济于事。
有人知道这个命令吗?
【问题讨论】:
几个月前我发现了一个命令,当按下向上箭头时,我的 bash 历史记录自动完成在线上的内容:
$ vim fi
按 ↑
$ vim file.py
我想在我的新计算机上进行设置,因为它在保存大量历史记录时可以节省大量时间。问题是我一生都记不起它在哪里被提及,不幸的是,阅读无休止的 bash 参考资料和教程也无济于事。
有人知道这个命令吗?
【问题讨论】:
使用 ohmyzsh,在您的 .zshrc 中使用它:
bindkey '\e[A' history-search-backward
bindkey '\e[B' history-search-forward
要重新加载,source ~/.zshrc 或重新启动终端。
【讨论】:
如果 set enable-keypad on 像某些 st (suckless simple terminal) 用户一样在您的 ~/.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
这也是同一个主题:My cursor keys do not work 还有这个xterm: special keys
【讨论】:
大概是这样的
# ~/.inputrc "\e[A": 历史搜索-向后 "\e[B": 历史搜索转发或等价的,
# ~/.bashrc 如果 [[ $- == *i* ]] 然后 绑定'“\ e [A”:历史搜索向后' 绑定 '"\e[B": 历史搜索转发' 菲(if 语句检查交互模式)
通常,Up 和 Down 分别绑定到 Readline 函数 previous-history 和 next-history。我更喜欢将 PgUp/PgDn 绑定到这些函数,而不是取代 Up/Down 的正常操作。
修改~/.inputrc后,重启你的shell或者使用Ctrl+X,Ctrl+R告诉它重新阅读~/.inputrc。
顺便说一句,如果您正在寻找相关文档:
Bash 使用 The GNU Readline Library 作为 shell 提示符和历史记录。
【讨论】:
使用以下内容更新 .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 的del 键才能正常工作(faq)。当键盘位于箭头键上时,是"\C-[OA" 和"\C-[OB"(以及"\C-[OC" 和"\C-[OD")。我在下面发布了一个答案来澄清这一点。
您可能需要启用 bash 补全。
检查
/etc/profile/etc/bash.bashrc~/.bashrc查看以上文件是否来自/etc/bash_completion。即
如果/etc/bash___completion 不是上述任何文件的来源,您需要将其添加到其中一个文件中。
如果您希望计算机上的所有 bash 用户都完成 bash,请从 /etc/bash.bashrc 获取 /etc/bash_completion。
如果只有您想要完成 bash,请从您的 ~/.bashrc 获取 /etc/bash_completion。
【讨论】: