【问题标题】:Emacs, Evil-Mode: Replace only in visual selection/visual block?Emacs,邪恶模式:仅在视觉选择/视觉块中替换?
【发布时间】:2015-01-23 09:27:59
【问题描述】:

默认情况下,:s/[search-term]/[replace-term] 适用于整行而不是视觉选择。例如,如果您在 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) 适用于区域,但不适用于视觉选择。

标签: emacs replace selection evil-mode


【解决方案1】:

您可以通过指定范围在视觉选择中进行替换。 '<,'> 作用于所选内容的第一行到最后一行,`<,`> 作用于第一个字符到最后一个字符。所以在你的第一个例子中

a b |c d e| f g`, 

使用:`<,`>s/ //g会给你

a b cde f g

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

【讨论】:

  • 谢谢!经过一些跟进,我还发现(setq evil-ex-visual-char-range t) 默认启用该功能。不过,对视觉块模式感到很失望。
【解决方案2】:

现在有一个包evil-visual-replace来完成块替换:

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

如果底层逻辑与 evil 集成会很好,这样用可视块按 : 就可以了,但总比没有好。

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 2017-01-24
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多