你如何在Vim的命令历史中搜索?

109

我也想在Vim中实现以下搜索

(reverse-i-search)`':

输入前一个命令的单词,即可获取完整命令。

我知道 Vim 中的时间线工具。

q:

然而,它并不像模糊反向搜索那样有用。

如何在Vim中实现与终端类似的反向搜索?


@Masi:为什么它不太有用?您仍然可以在那个历史记录中搜索,因此它使其更强大。 - sumek
实现反向搜索模拟的方法其实相当简单,可以查看下面我的回答。 - Vic Goldfeld
6个回答

175

在正常模式下输入q:打开命令窗口。你可以使用普通的vim命令在这里进行搜索/编辑。你开始于正常模式。按下Enter来执行一个命令。

这种方法让你可以搜索整个命令,而不仅仅是行首。


73
现在我知道为什么有时退出 Vim 缓冲区或 Vim 本身时会得到命令历史记录。 - sargas
1
有没有方法将这个与fzf结合起来? - jchook
4
@jchook,有一个名为vim-fzf的插件,它提供了:History:命令,可以让你模糊搜索命令历史记录。但是,在执行之前没有修改它们的方法。 - sumek
3
@sumek说:fzf.vim:History:命令可以使用Ctrl + e在执行前修改命令。 - Matthias Braun
@MatthiasBraun:太棒了!!!非常感谢! :) 以前没有注意到! - sumek

95

输入以前命令的前几个字母,然后按向上箭头(或Ctrl+p)。

:set li<up>
:set lines=75

不要忘记检查历史选项并将其设置为足够大的值

:set history=1000

如果您在 Mac 上使用 Visor,请尝试使用 :set lines=48。由于某种原因,窗口在设置为 75 行时会扩展得太大。 - Léo Léopold Hertz 준영
75 仅为示例目的,但感谢 Visor。虽然我从未需要过一个这样的东西,但我很喜欢它! - Mykola Golubyev
我使用的不是终端Vim,而是MacVim。 - Mykola Golubyev
1
谢谢。这比默认的历史记录大小好多了,我发现默认大小只有20。难怪我的历史记录记忆力如此短暂,我不得不重新输入所有内容。 - pbarill
1
有没有不用箭头键的方法来完成这个操作? - Deiwin
4
在bash命令行中,使用Ctrl+p(和Ctrl+n用于下一个命令)可以调用最后一条命令。 - Pipo

32

在命令模式下按Ctrl+F可以打开命令历史窗口。然后,您可以使用/?和其他搜索命令。按Enter键从历史记录中执行命令。

有关命令历史窗口的更多信息,请参见:h cmdwin


喜欢它!这正是我在寻找的。 - Eddy Ekofo

13

这里是Vim命令行历史记录文档,此外,还可以查看关于Vim命令行历史记录的文档部分,其中包括在历史记录中使用的按键绑定。看起来,您可以输入 :foo 然后按向上箭头找到最近以“foo”开头的命令。


10

5
我也一直在寻找这个功能(终于明白为什么它没有内置了),决定不能抵制实现的诱惑,所以给你提供了这个实现:https://github.com/goldfeld/ctrlr.vim。它应该像shell一样工作 - 当然还有一些基本的东西缺失(比如按^R跳过到下一个匹配项),但是我在第一个版本中使用的所有内容都已经包含了,并且我计划在未来几周内添加其余的功能,只要我有时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接