首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Vim中的单个命令调用中全局搜索和替换,从光标位置开始,围绕文件末尾?

如何在Vim中的单个命令调用中全局搜索和替换,从光标位置开始,围绕文件末尾?
EN

Stack Overflow用户
提问于 2011-09-29 21:35:57
回答 4查看 66.9K关注 0票数 121

当我使用/的正常模式命令进行搜索时:

/\vSEARCHTERM

Vim从光标位置开始搜索,然后继续向下搜索,向上折回。但是,当我使用:substitute命令进行搜索和替换时:

:%s/\vBEFORE/AFTER/gc

相反,Vim从文件的顶部开始。

有没有办法让Vim执行搜索和替换,从光标位置开始,在到达末尾后回绕到顶部?

EN

回答 4

Stack Overflow用户

发布于 2011-09-29 21:39:50

您已经使用了一个范围%,它是1,$的缩写,意思是整个文件。要从当前行转到末尾,您可以使用.,$。句点表示当前行,$表示最后一行。所以命令应该是:

:.,$s/\vBEFORE/AFTER/gc

但是可以假定.或当前行可以被删除:

:,$s/\vBEFORE/AFTER/gc

有关更多帮助,请参阅

:h range
票数 192
EN

Stack Overflow用户

发布于 2011-09-29 21:39:15

%1,$的快捷方式

( Vim help => :help :%等于1,$(整个文件)。)

.是游标位置,因此可以执行以下操作

:.,$s/\vBEFORE/AFTER/gc

从文档开头到光标的位置进行替换

:1,.s/\vBEFORE/AFTER/gc

我强烈建议您阅读有关range :help range的手册,因为几乎所有的命令都适用于range。

票数 55
EN

Stack Overflow用户

发布于 2014-03-19 00:18:11

我终于想出了一个解决方案来解决这样一个事实,即退出搜索会绕到文件的开头,而不需要编写大量的函数。

你不会相信我花了多长时间才想出这个。只需添加一个是否换行的提示:如果用户再次按q,则不要换行。因此,基本上,通过点击qq而不是q退出搜索!(如果您确实想要包装,只需输入y。)

:,$s/BEFORE/AFTER/gce|echo 'Continue at beginning of file? (y/q)'|if getchar()!=113|1,''-&&|en

我实际上把它映射到了一个热键上。因此,例如,如果您想要搜索和替换光标下的每个单词,从当前位置开始,使用q*

exe 'nno q* :,$s/\<<c-r>=expand("<cword>")<cr>\>//gce\|echo "Continue at beginning of file? (y/q)"\|if getchar()==121\|1,''''-&&\|en'.repeat('<left>',77)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7598133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档