我使用了这样的代码:
(defvar my-defvar "test")
(completing-read "input: " '("1" "2" my-defvar))
然后 M-x eval-region
。
我在迷你缓冲区中得到了“1”,“2”,my-defvar
。
我的问题是如何将my-defvar
转换为列表中的字符串。
答案 0 :(得分:12)
在Lisp中,´
- 符号将引用表达式的其余部分。这意味着该值将完全按照写入的方式表达,不计算函数调用,不替换变量值等。
最直接的方法是在评估元素列表之后使用创建元素列表的函数list
,例如:
(completing-read "input: " (list "1" "2" my-defvar))
当然,您也可以使用 backquote 语法,如另一个答案所示。这允许您引用复杂的表达式,但取消引用(即评估)它的一部分。但是,在这个简单的案例中,我认为这不是适合这项工作的工具。
答案 1 :(得分:6)
my-defvar
未被评估为变量,它被解释为符号。
请参阅Emacs Lisp: evaluate variable in alist。
所以:
(defvar my-defvar "test")
(completing-read "input: " `("1" "2" ,my-defvar))
应该有用。
更新:在@ Lindydancer的answer中提供了更合适的解决方案,但我将此留待此处参考。