我正在使用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'和评论。
我想知道是否有一种更优雅的方式来评论搜索历史中的搜索字符串,类似于命令行历史。
答案 0 :(得分:1)
你在标题中使用了“优雅”这个词,而我没有提供。如果相反,你也可以接受一个依赖于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\+Rege\x*p/^@ use this to search foo bars
^@
这里是一个字面的NUL。您可以按 Ctrl V 然后000
输入它。
Vim将忽略空字节后的所有内容,但它仍将显示搜索历史记录中的整行,包括“注释”。
答案 1 :(得分:1)
您可以添加从不匹配的正则表达式分支,例如/\%$indicator\|search string
\%$
是一个特殊的Vim原子,匹配文件的末尾。由于在指示符文本后面将永远不会匹配,因此第一个分支(最多\|
)将永远不会匹配,因此可以代表您的指标。
我创建了TaggedSearchPattern plugin以便添加标记并更轻松地回忆它。