如何在SLIME的REPL中为common lisp获取语法高亮显示?

7
我想学习Common Lisp,并已通过emacs包管理器安装了emacs(24.3)和slime。
在slime REPL中,语法高亮不起作用。另一方面,在Lisp-Mode中启动(同时在slime REPL中),表达式的值不再被打印出来(当我输入“Hello World”并按回车键时,我得到一个新行而不是表达式的值)。
(如果我打开lisp文件,则语法高亮有效)

1
语法高亮到底在哪里无法正常工作?您是指 *.lisp 缓冲区还是 REPL 或两者都有问题?您还可以将 Common Lisp 标签添加到您的问题中以增加可见性。 - schaueho
我在谈论 REPL。 - user3691571
1
已添加标签并编辑了问题,希望现在更清晰明了。 - user3691571
我可以为缓冲区获取语法高亮,尽管我无法像在CL代码缓冲区中那样获得不同的语法高亮。相反,整个*slime-repl*缓冲区都会获得语法高亮,这使得您可以快速区分您键入的代码、来自CL系统的警告或消息以及返回值。 - schaueho
1个回答

3
这对我有用。(https://comp.emacs.narkive.com/AWoywbFs/tweaking-slime):
(defvar slime-repl-font-lock-keywords lisp-font-lock-keywords-2)
(defun slime-repl-font-lock-setup ()
  (setq font-lock-defaults
        '(slime-repl-font-lock-keywords
         ;; From lisp-mode.el
         nil nil (("+-*/.<>=!?$%_&~^:@" . "w")) nil
         (font-lock-syntactic-face-function
         . lisp-font-lock-syntactic-face-function))))
      
(add-hook 'slime-repl-mode-hook 'slime-repl-font-lock-setup)
      
(defadvice slime-repl-insert-prompt (after font-lock-face activate)
  (let ((inhibit-read-only t))
    (add-text-properties
     slime-repl-prompt-start-mark (point)
     '(font-lock-face
      slime-repl-prompt-face
      rear-nonsticky
      (slime-repl-prompt read-only font-lock-face intangible))))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接