在readline / bash中使用vi模式似乎打破了历史搜索

时间:2017-03-22 12:08:26

标签: bash shell command-line vi readline

我非常喜欢将readline的history-search-forwardhistory-search-backward与bash一起使用。我的.inpurc

中有以下内容
# Scroll through matching history with up and down keys
"\e[A":history-search-backward
"\e[B":history-search-forward

并使用向上和向下键滚动历史记录中的匹配命令。

然而,当我启用vi-mode时,似乎停止了历史搜索的工作。我这样配置了vi-mode(也在.inputrc中):

# Enable vi mode
set editing-mode vi
set keymap vi-command

# insert/command mode indicator:
set show-mode-in-prompt on

# Indicator formatting in prompt:
set vi-cmd-mode-string "\1\e[0;34m\2[\1\e[0m\2C\1\e[0;34m\2]\1\e[0m\2 "
set vi-ins-mode-string "\1\e[0;34m\2[\1\e[0m\2I\1\e[0;34m\2]\1\e[0m\2 "

当我从.inputrc中删除与vi模式相关的行时,历史搜索工作正常。当我把它们放回去时,它会断裂。

有没有办法同时启用这两个功能?

我在OSX Sierra上使用通过自制程序安装的GNU Bash 4.4.12。

1 个答案:

答案 0 :(得分:2)

vi-insert模式为我工作:

set editing-mode vi
set keymap vi-insert
    "\e[A":history-search-backward
    "\e[B":history-search-forward

或者你可以在bashrc

中写下这个
set -o vi
bind -m vi-insert '"\e[A":history-search-backward'
bind -m vi-insert '"\e[B":history-search-forward'
相关问题