1

假设我有一些文字,例如:

First one is good, so I used first one.Second one is bad, so I drop it.

我想切换“第一”和“第二”,就像替换字符串一样,将大写字母与原始单词保持相同的大小写。

是否有任何内置函数来处理这种情况?

编辑:让我进一步解释问题。如果我使用通常的替换字符串两次,有时会导致不需要的结果。在上面的示例中,如果使用替换字符串第一个 RET 第二个 RET,然后替换字符串第二个 RET 第一个 RET,它将输出:第一个很好。所以我用了第一个。第一个不好,所以我放弃了。在某些情况下,这也是一个问题,例如“clientFolder=>serverFolder and server=> client”

4

3 回答 3

4

@huaiyuan 在这里回答了同样的问题:

如何同时交换或替换代码中的多个字符串?

他的代码允许您输入任意对列表来进行并行替换。

顺便说一句,如果您想阅读一些很酷的 lisp 代码,请单击 @huaiyuan 并阅读他的答案。

于 2013-04-02T12:54:23.933 回答
3

这是 Mickey 的 Mastering Emacs 博客提供的一个绝妙技巧(请参阅“交换元素”标题下的http://www.masteringemacs.org/articles/2013/01/25/evaluating-lisp-forms-regular-expressions/ )

C-M-% \(first\)\|second RET \,(if \1 "second" "first") RET

编辑:这是一个 elisp 版本:

(defun my-swap-text (a b)
  "Swap two pieces of text wherever they appear, using `query-replace-regexp'."
  (interactive "sSwap: \nswith: ")
  (let ((use-region (and transient-mark-mode mark-active)))
    (query-replace-regexp
     (rx (or (group (eval a)) (eval b)))
     (quote (replace-eval-replacement replace-quote (if (match-string 1) b a)))
     nil
     (when use-region (region-beginning))
     (when use-region (region-end)))))
于 2013-04-02T04:53:54.700 回答
-1

你谷歌搜索过这个吗?

http://kb.iu.edu/data/abdp.html

于 2013-04-02T04:11:59.643 回答