说我有一些文字:
First one is good, so I used first one.Second one is bad, so I drop it.
我想切换'first'和'second',并且像replace-string一样,将大写留给与原始单词相同的大小写。
是否有内置函数来处理这种情况?
编辑: 让我进一步解释一下这个问题。如果我使用普通的replace-string两次,有时会导致不必要的结果。在上面的例子中,如果先使用replace-string,那么RET第二个RET,那么替换第二个RET第一个RET,它就会出来把:第一个是好的。所以我用了第一个。第一个是坏的,所以我放弃它。在某些情况下,这也是一个问题,如“clientFolder => serverFolder和server => client”
答案 0 :(得分:3)
How can I swap or replace multiple strings in code at the same time?
他的代码允许您输入任意对的列表以进行并行替换。
很明显,如果你想阅读一些很酷的lisp代码,请点击@huaiyuan并阅读他的答案。
答案 1 :(得分:1)
这是一个很好的技巧,由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)))))
答案 2 :(得分:-1)
你在谷歌搜索这个吗?