Vim - 搜索和替换结果

Posted

技术标签:

【中文标题】Vim - 搜索和替换结果【英文标题】:Vim - Search and replace the results 【发布时间】:2011-05-04 04:30:24 【问题描述】:

几个月后,我对 Vim 越来越熟悉了。 但是,只有一个简单的功能我无法从网络上得到任何答案。那就是“搜索并替换结果”。问题是我知道:

:/keyword 进行搜索,按回车键“keyword”会高亮显示(当然用set hlsearch) n,或 N 导航

:%s/keyword/new_keyword/g 用new_keyword替换所有出现的关键字。

但是,我认为必须有一种搜索方法,并将匹配的关键字(突出显示)替换为任何 new_keyword 而不执行“:% s/keyword/new_keyword/g”,考虑到搜索,这是很多打字& replace 是一项日常功能。

任何答案/cmets 将不胜感激!

【问题讨论】:

【参考方案1】:

如果您已经完成了搜索,您可以通过简单地在替换命令中省略模式来替换相同的模式。例如:

/keyword

搜索“关键字”,然后:

:%s//new_keyword/g

将所有出现的“keyword”替换为“new_keyword”。

【讨论】:

这太好了...不知道使用先前搜索的空搜索字符串。我会补充说,虽然搜索和替换如此频繁,但我会添加某种映射来为你做这件事,例如:nmap f :%s/\=expand("" )\>/ 这将搜索并替换光标当前所在的单词...您还可以使用:nmap F :%s// 在您已经搜索过某些内容时使用。【参考方案2】:

搜索并使用点命令(你不是说你在使用点命令,这就是我突出显示它的原因)重复上一个输入操作是我最好的选择。

我使用 s///g 进行搜索和替换。

【讨论】:

感谢 Ronny,这对我来说不是一个有效的通用解决方案,但让我想起了一个重要的 Vim 命令“.”。干杯!!!【参考方案3】:

好吧,由于#keyword# 和#new_keyword# 占了大部分字符,并且您需要一些方法来区分它们(即,vim 中的字符,或不同编辑器中对话框中输入字段之间的制表符),除此之外,您可能还剩下四到五次击键。

所以我认为您可能高估了击键次数,并且忘记了 (1) 它变得非常自然,并且 (2) 以这种方式工作还允许您通过指定不同的范围或选项标志自然地修改执行的操作.

但是您可以减少击键次数。如果您愿意,您可以映射一个键以自动调出带有“%s/”的命令行。例如:

nmap s :%s/

上面的命令将重新映射“s”(我不建议重新映射到那个键,但它给出了想法)并设置您插入关键字。

此外,您可以将“gdefault”选项设置为默认每行替换多次。这可以让您在击键中跳过结尾的“/g”:

set gdefault

有关该选项的帮助部分,请参见 ':h gdefault'。

最后我想说的是习惯它的默认工作方式,因为这样使用它可以让您在想要指定不同的范围或选项标志时保持相同的基本操作,并且创建一个新的特殊映射只是另一件事要记住。如果您认为大部分时间都需要 gdefault,则可能值得设置它,在设置 gdefault 时在末尾添加 /g 标志具有关闭 /g 的效果。 . .

【讨论】:

非常感谢赫伯特,提供了很多有用的信息和提示。特别是,我发现设置 gdefault 和 /g 动态取消设置很漂亮而且不知道。干杯!!!【参考方案4】:

移动到第一个突出显示的单词,然后录制一个宏以替换该单词并移动到下一个,例如:

gg n QQ caw new_word^[ n q @q @@ @@ ...

【讨论】:

与简单地将关键字重新输入:%s/.../.../g相比,这是一个地狱 @meagar: 是的,但问题不在于如何以最少的击键次数完成操作,而在于如何在没有 :%s 的情况下完成操作 @meagar:不是在你可以按. 继续做同样的事情时。 @Codeninja 他问的不是没有:%s 怎么办,而是问怎么办 with :%s 但没有重新输入关键字。跨度> @Greg 如果要替换 1000 个匹配项怎么办?

以上是关于Vim - 搜索和替换结果的主要内容,如果未能解决你的问题,请参考以下文章

linux操练之---------vi/vim去除历史查找结果高亮显示

VIM,增量搜索:如何跳转到下一个结果并使其突出显示?

让vi高亮显示搜索结果(macOS)

IDEA 搜索结果放进 Excel

如何在vim中用ack进行搜索和替换?

VIM常用操作