在emacs中搜索并替换矩形内部

时间:2012-06-21 01:51:20

标签: search emacs replace

是否可以在emacs中的矩形区域内执行replace-string操作?如果是这样,怎么样?

4 个答案:

答案 0 :(得分:26)

如果启用CUA选择模式:

M-x cua-selection-mode RET

或永久存储在您的init文件中:

(cua-selection-mode 1)

然后,您可以使用其高级矩形编辑工具。

(或者,如果您是cua-mode用户,那么您不需要这样做。)

  • C-RET 标记一个角落。
  • 将点移动到对角。
  • M-r 在标记的矩形内进行 regexp 替换。
  • C-RET 取消标记/退出矩形编辑。

有关文档,请在 Mx find-library RET cua-base RET <的注释中查找“CUA矩形支持”标题/ KBD>

如果由于某种原因你不想使用cua矩形工具(也许你真的需要replace-string),使用apply-on-rectangle的自定义函数就可以很简单地组合在一起了。 / p>

编辑:实际上,比我预期的要复杂一些,但大部分代码都是交互式规范和对'分隔'前缀参数行为的支持(均基于{{1} })。

编辑2 :我认为这值得以更全面的方式进行:

以下提供 Cx r M - % Cx r < kbd> CM - %,(希望)以您期望的方式行事。

replace-string

答案 1 :(得分:5)

在最近的Emacs(例如Emacs 25)中,您可以使用M-%query-replace)或C-M-%query-replace-regexp)开箱即用。

使用M-x rectangle-mark-mode创建矩形区域。如有必要,请使用C-x C-x在标记前加上点。然后只需查询替换。

但是,他们没有对replace-string的Emacs 25进行相同的更改。如果你愿意,你可以这样做,只需添加参数region-noncontiguous-p,就像在query-replace中完成一样。代码很简单:

(defun replace-string (from-string to-string &optional delimited start end backward
                       region-noncontiguous-p)
  "..."
  (declare (interactive-only
            "use `search-forward' and `replace-match' instead."))
  (interactive
   (let ((common
          (query-replace-read-args
           (concat "Replace"
                   (if current-prefix-arg
                       (if (eq current-prefix-arg '-) " backward" " word")
                     "")
                   " string"
                   (if (use-region-p) " in region" ""))
           nil)))
     (list (nth 0 common) (nth 1 common) (nth 2 common)
           (if (use-region-p) (region-beginning))
           (if (use-region-p) (region-end))
           (nth 3 common)
           (if (use-region-p) (region-noncontiguous-p)))))
  (perform-replace
    from-string to-string nil nil delimited nil nil start end backward region-noncontiguous-p))

或者,您只需下载库replace+.el并从那里使用replace-string版本。它做你想要的。

FWIW,我刚刚提交了Emacs bug#27897以将此功能添加到replace-string以及同一个库replace.el中的其他几个命令。

答案 2 :(得分:1)

对于恶意用户,您可以使用我的包evil-visual-replace在邪恶的视觉块中获取query-replacereplace-regexp

答案 3 :(得分:0)

如果您处于CUA模式,则可以使用绑定到'M-r'的cua-replace-in-rectangle。