如何在Vim的 `scriptnames` 命令中进行搜索

7

vim的“scriptnames”命令输出所有已加载的脚本。问题是我找不到任何实用的方法来过滤/搜索/查找它。我想在不必通过“眼睛暴力”查找的情况下查找一些脚本。


我不知道是否有一种纯粹的vim方法来做到这一点,但是可以通过在 tmux 中运行vim,然后使用 tmux 的搜索功能来搜索您想要的内容来实现解决方法。如果您正在终端仿真器中,则可以使用其搜索功能。 - sid-m
2个回答

12

不存在 script 命令,只有 scriptencodingscriptnames 命令(可以缩写为 scr, 参考文献:h :scr)。我认为您正在寻找的是 scriptnames

Vim 8 可以通过 :filter 过滤大多数命令的结果:

:filter /pattern/ scriptnames

(参见:h :filter).

在较旧的Vim版本中,您可以在运行:scriptnames之前将所有消息重定向到文件,然后取消重定向:

:redir >file
:scriptnames
:redir END

(参见:h :redir命令). 或者,您可以将消息重定向到寄存器,然后将寄存器的内容粘贴到缓冲区:

:redir @a
:scriptnames
:redir END
:new
"aP

最后,Tim Pope的插件scriptease添加了一个命令:Scriptnames,它运行:scriptnames并将结果加载到快速修复列表中。


FYI :scriptnames 可以缩写为 :script - romainl
1
正如我所说:它可以缩写为 :scr。在旧版本的 Vim 中,这意味着它也可以缩写为 :scr:scriptnames 之间的任何内容(包括 :script),但现在不鼓励这样做。 - Sato Katsura
所以 :script 存在。在 Vim 脚本中不鼓励使用短名称,因为它们会使代码难以阅读,并且没有提供任何好处,但是在命令行上使用短名称则是非常鼓励的。 - romainl
@romainl,你误解了重点。在 Vim 8 发布之前对命令名称进行最近的清理时发现,由于隐式缩写,许多命令发生了冲突。因此,应仅使用最短和最长的名称。然而,在良好的 Vim 传统中,为了向后兼容性,这些隐式名称可能永远不会消失。它们仍然被反对。 - Sato Katsura
对不起,我刚才说错了,我指的是脚本名字。我甚至不知道那个完整的名字。答案真的有效!!!谢谢!附言:我修改了问题,用"scriptnames"替换了"script"。还要感谢你指出来! - geckos

1

最近版本的vim中,我们有execute()代替了:redir

因此,您可以使用:echo filter(split(execute('scritnames'), "\n"), 'v:val =~ "somepattern")或者:new+put=execute(':scriptnames')+在缓冲区中搜索,就像您探索日志一样。


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