Emacs,Evil-Mode:只替换可视选择/可视块中的内容?

5

默认情况下,:s/[搜索词]/[替换词] 只能用于整行而不是视觉选择。例如,如果您选择c和e之间的内容,如下所示:

a b |c d e| f g

进行:s/ //g操作,结果如下:

abcdefg

不是...而是...
a b cde f g

同样,在可视块选择中:

a b |c d e| f g
0 1 |2 3 4| 5 6

:s/ //g 生成以下结果:

abcdefg
0123456

相较于
a b cde f g
0 1 234 5 6

有没有办法让evil-mode的:s/仅在选定范围内工作(最好是默认情况下,或者使用类似vim的\%V关键字)?
(在这种情况下,:s/\%V //g似乎不起作用;它导致0个匹配。)
提前感谢。

Emacs的默认M-%(query-replace-regexp)可以在区域上工作,但不能在可视化选择上工作。 - Ehvince
2个回答

10

您可以通过指定范围在视觉选择中进行替换。 '<,'> 适用于选择的第一行到最后一行,`<,`> 适用于选择的第一个字符到最后一个字符。因此,在您的第一个示例中

a b |c d e| f g`, 

使用:`<,`>s/ //g命令会给你以下结果:

a b cde f g

不幸的是,目前Evil似乎不支持在Visual Block中进行替换,因此没有简单的方法进行替换。


2
谢谢!经过一些后续跟进,我还发现(setq evil-ex-visual-char-range t)可以默认启用。不过可视块模式有点遗憾。 - spacingissue

0
现在有一个名为evil-visual-replace的软件包,可以实现块替换:

https://github.com/troyp/evil-visual-replace

如果底层逻辑与evil集成,使得在可视块模式下按下:键就能够正常使用,那将是很好的,但这也比没有强。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接