如何重用可视模式选择?


163

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


好吧,我找到了一种方法,但是有点麻烦:
迷宫

Answers:


243

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


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

6
@skywinder:help gv
Heptite'Mar

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

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

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

14

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年

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

6

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

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

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

ma

在可视模式下将您当前的选择保存到a,然后

<a

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


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

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

1

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

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

我会输入:s/Goodbye/Hello/和VIM将取代所有实例GoodbyeHello

它只是vim的正则表达式和可视模式选择的组合。选择时,它应该自动填充'<,'>


1
抱歉,这不是我要的。我要问的是,您如何重用所选内容进行另一个查找,并在与之前所选的相同范围内进行替换?
迷宫

1
更换后,您将退出可视模式。输入,gv您的视觉模式将恢复为先前的选择状态。
Scott Nguyen 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.