如何在emacs lisp中捕获字符串中替换regexp的结果

如何在emacs lisp中捕获字符串中替换regexp的结果,emacs,elisp,Emacs,Elisp,我正在努力学习Emacs Lisp。我想从字符串中删除一些空白。我从以下测试用例开始: (defun test-fun (str) (interactive) (let ((ss str)) (replace-regexp-in-string "[ ]+" "" ss) (message ss))) (test-fun "He llo") 但是,在我的暂存缓冲区中对此进行评估表明,没有删除任何空间。这里有一个更正: (defun test-fun (str)

我正在努力学习Emacs Lisp。我想从字符串中删除一些空白。我从以下测试用例开始:

(defun test-fun (str)
  (interactive)
  (let ((ss str)) 
       (replace-regexp-in-string "[ ]+" "" ss)
    (message ss)))
(test-fun "He   llo")
但是,在我的暂存缓冲区中对此进行评估表明,没有删除任何空间。

这里有一个更正:

(defun test-fun (str)
  (let ((ss (replace-regexp-in-string "[ ]+" "" str)))
    (message ss)))
interactive
只对interactive命令有用,所以这里不需要它。
还要注意评估顺序。

完美!这很有效。。因此,在我的例子中,
replace regexp in string
不会更改其参数,
ss
,而是返回修改后的字符串?正确。从
C-h f replace regexp in string
:“返回包含替换项的新字符串。”