通常,在编辑代码时,我会在可视模式下选择一个块并进行搜索并替换该块。但是,在我进行更改后,它将离开可视模式。如何进行新的查找并替换相同的选择?

评论

好吧,我找到了一种方法,但是有点麻烦::'<,'> s / old / new / g不需要输入'<,'>?
的任何方法

#1 楼

您可以使用gv重新选择最后选择的可视区域。

评论


太棒了! @Heptite如何通过Stackoverflow自己找到此命令?

–skywinder
16年1月1日在9:16

@skywinder:帮助gv

–庚烷
16年1月1日在12:20

@Heptite:我不确定在这里您是否被嘲笑,但是一旦您知道了:gv的功能,该命令就会向您显示。但是,如果我没有呢?教一个(女人)钓鱼和所有这些。

– Ben Thul
17年11月10日在4:01

@BenThul:我想我误解了这个问题。我很了解Vim的许多功能,只是通过逐步阅读大量文档(从“:help”开始)。

–庚烷
17-11-10在4:02



:help select-visual应该会带您进入vim @skywinder中的正确手册。

–user210242
18年4月25日在18:25

#2 楼

gv绝对是最快的方法(使用最后一个选择),但是如果您想要一个稳定的保存选择区域(或多个选择区域),则始终可以创建宏。

说我想存储我的选择当前方法,从第25-35行开始。我可以通过键入

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording
创建一个宏来选择整个方法,然后我可以通过键入@a(在寄存器a中运行宏)来重新获得该选择。重复您想要的任何寄存器,行或行的各个部分。显然,如果您对文件进行更改,则选择内容也会发生变化,因此您可能需要考虑使用标记而不是“硬编码”行号。

评论


zmto输入您需要知道行号。我认为最好先定义两个标记,然后使用:'a,'b在它们之间的范围内进行操作(如果要在一行中添加粒度,请用反引号替换')

– sillyMunky
2014年1月16日在1:24



是的,行号是愚蠢的-我只是以它为例来说明如何创建选择宏。但是,使用一系列标记是一个有趣的主意...

– AlexMA
14年6月25日在18:38

#3 楼

gv非常适合恢复上一个选择。但是有时有时需要更多。

如果您需要更持久的记录,请查看我们当前正在GitHub上使用的此插件。

VisualMarks允许您使用m保存和恢复视觉选择的区域,就像在文件中保存和标记特定位置一样。安装后,并使用默认选项,在可视模式下使用:

ma


以可视方式保存当前选择以标记a,然后

<a


在正常模式下返回此选择。

评论


哇,听起来真酷。我必须尝试一下该插件!顺便说一句,这些VisualMark是否可以像标记一样在mkview中保留?

–迷宫
2015年10月20日在17:43



@labyrinth我不知道mkview但是..我想是,因为标记保存在单独的文件中,并且..我还是建议您尝试:)如果它们没有如您所愿地持久,我们将很高兴收到您的来信。 GitHub上的功能请求,并尝试对其进行处理。

–iago-lito'考虑离开
15-10-20在20:00



#4 楼

假设我想用Hello替换Goodbye,并选择了以下代码:

public static void main(String[] args){
    System.out.println("Goodbye World");
}


我将输入:s/Goodbye/Hello/,并且vim将Goodbye的所有实例替换为Hello

这只是vim正则表达式和可视模式选择的结合。选择后,应自动填充'<,'>

评论


抱歉,这不是我要的。我要问的是,您如何重用所选内容以再次查找并替换之前选择的相同范围?

–迷宫
2010-12-10 18:24

更换后,您将退出视觉模式。输入gv,您的视觉模式将恢复为先前的选择状态。

–斯科特·阮(Scott Nguyen)
2010-12-10 22:03

#5 楼

Vim会记住上一个选择。

如果在可视模式下输入:,它将自动为您填充:'<,'>,以便您可以继续输入命令,例如

:'<,'>s/old/new/    # (Replace pattern in selected area)


如果要在同一视觉选择上执行另一条命令,只需从历史记录中调出旧命令并对其进行编辑。

:'<,>'s/abc/xyz/    # (This will run the replace command on the same selection area)


告诉替换命令和其他支持匹配模式的命令使用先前选择的另一种方法是在模式中添加\%V,例如

:s/\%Vabc/xyz/      # (Same as above)


有关更多信息,请参见:help \%V。

要使用gv重新选择先前的选择。