有没有办法优雅地注释 vim 搜索历史中的特定行,类似于命令行历史中的" ?



我正在使用 vim 来编辑结构化文本文件。

有时我使用搜索

和替换功能,有时我最好使用搜索,然后使用宏,在这种情况下,我手头有几个宏,其中一个的选择取决于特定的搜索结果。

在这两种情况下,尽管我必须花一些精力才能找到一个可接受的正则表达式来满足我的编辑需求。由于正则表达式通常非常长且复杂,因此我最终会得到命令行历史记录和搜索历史记录,其中充满了我的试错副产品。正确的正则表达式并不总是一系列尝试中的最后一个,所以如果我想在类似的编辑情况下重用来之不易的正则表达式,我必须再次挖掘一堆。

在搜索和替换

方案中,我通过注释快速修复了此问题,我现在在可重用的搜索和替换命令字符串的末尾放置了注释,例如:

:%s/very_long_and_sophisticated_regex/another_long_and_sophisticated_regex/gc "comments on what this search and replace command does and how it might be reused

这样,我可以轻松地忽略命令行历史记录中的大量内容,并快速找到相关的重用候选者,它们以不同的颜色显示。这些命令可以立即重用,注释将被忽略。

不过,搜索历史并非如此。

在网上搜索并搜索后,我没有找到类似的东西。目前,我将使用 XXX 的准注释放在可重用搜索字符串的末尾,例如:

/search_string_containing_very_long_and_sophisticated_regex XXX comments on what it finds and how it might be re-used

这样我至少可以找到正确的字符串以供重用,但我必须首先删除"XXX"和注释。

我想知道是否有一种更优雅的方式来注释搜索历史记录中的搜索字符串,类似于命令行历史记录。

你在标题中使用了"优雅"这个词,我没有提供。相反,如果您也可以接受依赖于 Vim 内部的古怪解决方法,这里有一个。

为了重申您的问题,可以在Ex :commands之后添加注释,

:AComplicatedExCommand -42 -quux    " this fizzes the brobble
:HardToRememberCommand test.txt     " use this to brew the framble

但对于复杂的搜索/queries(或?queries)来说,这是不可能的。

我刚刚发现您可以通过使用文字空字节终止搜索查询来欺骗 Vim:

/[Complicated]*regexp/^@              this regexp finds all scrobbles
/another+Regex*p/^@                 use this to search foo bars

这里的^@是一个字面上的 NUL。您可以通过按 CtrlV 然后按 000 来输入它。

Vim 将忽略空字节后的所有内容,但它仍然会在搜索历史记录中显示整行,包括"注释"。

您可以添加一个永远不匹配的正则表达式分支,例如 /%$indicator|search string

%$是一个与文件末尾匹配的特殊 Vim 原子。由于该分支在后跟指标文本时永远不会匹配,因此第一个分支(最多 | 个)永远不会匹配,因此可以代表您的指标。

我创建了TaggedSearchPattern插件,以便添加标签并调用它变得更加容易。

相关内容

最新更新