Emacs 连接abbrev文件中的字符串

Emacs 连接abbrev文件中的字符串,emacs,elisp,Emacs,Elisp,在我的缩写文件中,concatenate不起作用的原因是什么?我希望“env”扩展到这一小块代码,出于可读性原因,我更喜欢将字符串分隔成多行。然而,Emacs似乎忽略了缩写 (define-abbrev-table 'python-mode-abbrev-table '( ("env" (concatenate 'string "#! /usr/bin/env python\n" "\n" "from __

在我的缩写文件中,
concatenate
不起作用的原因是什么?我希望“env”扩展到这一小块代码,出于可读性原因,我更喜欢将字符串分隔成多行。然而,Emacs似乎忽略了缩写

(define-abbrev-table 'python-mode-abbrev-table
  '(
    ("env" (concatenate 'string
             "#! /usr/bin/env python\n"
             "\n"
             "from __future__ import division\n"
             "from __future__ import print_function\n"
             "from __future__ import absolute_import\n"
             "from __future__ import unicode_literals\n\n")
       nil 3)
   ))

表达式不会在带引号的列表中求值。您可以使用反引号有选择地评估列表结构的某些部分:

(define-abbrev-table 'python-mode-abbrev-table
  `(
    ("env" ,(concatenate 'string
             "#! /usr/bin/env python\n"
             "\n"
             "from __future__ import division\n"
             "from __future__ import print_function\n"
             "from __future__ import absolute_import\n"
             "from __future__ import unicode_literals\n\n")
       nil 3)
))

在反引号表达式中,逗号表示应计算的部分。

只需将其表示为
(list(list“env”(concatenate…)nil 3))
。我将此列表放在需要反引号的边界线上。但是,如果您通常将复杂列表作为带引号的文本编写,那么当您想要将一些元素调整为计算的文本时,使用反引号是最简单的。