当我使用/
的正常模式命令进行搜索时:
/\vSEARCHTERM
Vim从光标位置开始搜索,然后继续向下搜索,向上折回。但是,当我使用:substitute
命令进行搜索和替换时:
:%s/\vBEFORE/AFTER/gc
相反,Vim从文件的顶部开始。
有没有办法让Vim执行搜索和替换,从光标位置开始,和在到达末尾后回绕到顶部?
发布于 2011-09-29 21:39:50
您已经使用了一个范围%
,它是1,$
的缩写,意思是整个文件。要从当前行转到末尾,您可以使用.,$
。句点表示当前行,$
表示最后一行。所以命令应该是:
:.,$s/\vBEFORE/AFTER/gc
但是可以假定.
或当前行可以被删除:
:,$s/\vBEFORE/AFTER/gc
有关更多帮助,请参阅
:h range
发布于 2011-09-29 21:39:15
%
是1,$
的快捷方式
( Vim help => :help :%
等于1,$(整个文件)。)
.
是游标位置,因此可以执行以下操作
:.,$s/\vBEFORE/AFTER/gc
从文档开头到光标的位置进行替换
:1,.s/\vBEFORE/AFTER/gc
等
我强烈建议您阅读有关range :help range
的手册,因为几乎所有的命令都适用于range。
发布于 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)
https://stackoverflow.com/questions/7598133
复制相似问题