Vim 冻结,模糊搜索和野生菜单选项卡完成

问题描述

我正在尝试使用来自 this video提示自定义我的 vimrc。我将这两行添加到我的 vimrc 中:

set path+=**
set wildmenu

...启用模糊文件搜索。但是,当我尝试点击选项卡以显示结果时,出现了一些问题:

  1. 如果我尝试 :find *foo(或 :find *.foo w/ .foo 文件类型),当我点击 Tab 并且一切都冻结后,命令行将卡住为 :find *foo ...
  2. 如果我执行 :find fo 并按 Tab 键尝试自动补全文件名,命令行也会同样卡住。
  3. 唯一不冻结的情况是,如果我在与 vimrc 相同的目录中打开 vim(对我来说它是 ~/vimfiles),这里的匹配项将显示在 Wildmenu 中,但如果我向上打开任何文件在我的 vimfiles 目录中,它会显示混乱的字符。
  4. 如果我向下搜索具有确切名称 :find foo.foo文件搜索确实有效,那么 foo.foo 将正确打开。但我无法以同样的方式向上搜索

知道我能做什么/应该知道什么吗?如果相关,我在 Windows 上。谢谢。

编辑:经过更多测试后,我发现了以下内容

  • 当我从 vimfiles 执行 :find *foo 时,它实际上并没有产生所有可能的模糊结果
  • 一个非常小的目录中进行测试,模糊搜索实际上确实有效,我意识到在较大的目录中它也可以工作,但最多需要 30 分钟 ~ 1 小时,具体取决于关于目录大小。

那么对于较大的目录是否不使用它?

此外,有没有办法在冻结的情况下中断/中断命令的执行?

解决方法

...启用模糊文件搜索

那不是“模糊搜索”。

.foo 文件类型

.foo扩展名,而不是“文件类型”。

那么对于较大的目录是否不使用它?

是的。 set path+=** 表示当你要求 Vim 执行 :find *foo 时,它会在工作目录下的每个目录中搜索名称中带有 foo 的文件,这会比树慢变大。请注意,这里有两个瓶颈,它们合谋减慢了速度:

  • Vim 用于搜索文件的搜索算法被描述为“深度优先”。这意味着(大致)在切换到下一个目录之前必须完全探索一个目录,如果您有一些非常深的目录,这可能会花费大量时间。
  • 构建“wildmenu”的效率不高,而且在非常大的列表中会很困难。

您有几种方法可以改进:

  1. 将您的 :help 'path' 设置为不包含 ** 的合理值。该选项是白名单,而不是垃圾箱。
  2. 使用更智能的查询。
  3. 设置合理的 :help 'wildignore' 以减轻野生菜单的工作量。

请参阅 this gist 以详细了解情况。

此外,有没有办法在冻结的情况下中断/中断命令的执行?

是的,参见:help <C-c>