也许~/.inputrc文件将这些键映射为某些奇怪的东西?或者你没有完全理解搜索历史记录的工作原理。
让我们重新开始:
使用bindkey重新映射这些键:
bindkey -M vicmd "?" history-incremental-search-backward
bindkey -M vicmd "/" history-incremental-search-forward
现在,当你按下'esc'(对于vi normal mode)和'?'时,你将得到一个bck-i-search命令:
%user@hostname: vim /etx/apache2/sites-enabled/defaul[t]
bck-i-search:
此时,您可以输入要搜索的内容,例如'etx'。光标将移动到该行中的该位置。请注意:如果在当前行中找不到该模式,则会继续搜索您的历史记录。这种行为被认为是一种功能!
您可能会注意到,您无法重复搜索(如在vim中按下'N')。在这种情况下,请添加一些isearch绑定:
bindkey -M isearch '^N' history-incremental-search-backward
bindkey -M isearch '^R' history-incremental-search-forward
现在,按下 control-N 会重复您的搜索,而按下 control-S 则会反转重复搜索的方向(注:此键绑定的默认顺序已从正向调整为反向,因为人们更常从历史的末尾往前查找)。
简而言之:将当前行视为您历史记录的“顶部”。使用 vicmd '/' 或 '?' 可搜索整个历史记录。'?' 自上而下搜索,'/' 则从光标当前位置开始沿着您的历史记录向“顶部”进行搜索。另一种思考方式是将您的历史记录想象成一个大文件,而当前行位于该文件的底部。如果这有助于您理解,您可能会觉得'?' 比 '/' 更相关。