【发布时间】:2014-01-07 12:26:14
【问题描述】:
我安装的 GNU Emacs 24.3.1 是“有用地”将单词“lambda”(在 python 模式中)和“fn”(在 clojure 模式中)转换为希腊符号 λ。我敢肯定这会让一些人高兴,但我不是其中之一。 :)
有没有 Emacs 黑客知道如何关闭这个不需要的功能?
我在init.el 中尝试了以下方法,但无济于事:
(defconst keywords-to-remove (lambda fn))
(font-lock-remove-keywords 'clojure-mode keywords-to-remove)
(font-lock-remove-keywords 'lisp-mode keywords-to-remove)
(font-lock-remove-keywords 'python-mode keywords-to-remove)
这是我init.el的当前内容:
(require 'package)
(add-to-list 'package-archives
'("marmalade" . "http://marmalade-repo.org/packages/") t)
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
(defvar my-packages '(starter-kit
starter-kit-lisp
starter-kit-bindings
auto-complete
slime
ac-slime
rainbow-delimiters
clojure-mode
nrepl))
(dolist (p my-packages)
(when (not (package-installed-p p))
(package-install p)))
(global-set-key (kbd "<C-tab>") 'next-multiframe-window)
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
(setq ac-delay 0.2) ;; eclipse uses 500ms
(add-to-list 'load-path "~/.emacs.d/ac-slime")
(require 'ac-slime)
(add-hook 'slime-mode-hook 'set-up-slime-ac)
(add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
(setq default-truncate-lines t)
(defun indent-buffer ()
"Indents an entire buffer using the default intenting scheme."
(interactive)
(save-excursion
(delete-trailing-whitespace)
(indent-region (point-min) (point-max) nil)
(untabify (point-min) (point-max))))
(require 'rainbow-delimiters)
(global-rainbow-delimiters-mode)
(require 'color-theme)
(eval-after-load "color-theme"
'(progn
(color-theme-initialize)
(color-theme-ld-dark)))
(add-to-list 'auto-mode-alist '("\\.cljs\\'" . clojure-mode))
;; Allow input to be sent to somewhere other than inferior-lisp
;;
;; This is a total hack: we're hardcoding the name of the shell buffer
(defun shell-send-input (input)
"Send INPUT into the *shell* buffer and leave it visible."
(save-selected-window
(switch-to-buffer-other-window "*shell*")
(goto-char (point-max))
(insert input)
(comint-send-input)))
(defun defun-at-point ()
"Return the text of the defun at point."
(apply #'buffer-substring-no-properties
(region-for-defun-at-point)))
(defun region-for-defun-at-point ()
"Return the start and end position of defun at point."
(save-excursion
(save-match-data
(end-of-defun)
(let ((end (point)))
(beginning-of-defun)
(list (point) end)))))
(defun expression-preceding-point ()
"Return the expression preceding point as a string."
(buffer-substring-no-properties
(save-excursion (backward-sexp) (point))
(point)))
(defun shell-eval-last-expression ()
"Send the expression preceding point to the *shell* buffer."
(interactive)
(shell-send-input (expression-preceding-point)))
(defun shell-eval-defun ()
"Send the current toplevel expression to the *shell* buffer."
(interactive)
(shell-send-input (defun-at-point)))
(add-hook 'clojure-mode-hook
(lambda ()
(define-key clojure-mode-map (kbd "C-c e") 'shell-eval-last-expression)
(define-key clojure-mode-map (kbd "C-c x") 'shell-eval-defun)))
【问题讨论】:
-
您应该检查
font-lock-keywords变量以查看这些字符串 (lambda, fn) 是否存在一些特殊规则。如果是这样,摆脱那些,你很高兴去。 Reference. -
谢谢,Noufal,这给了我一个开始寻找的地方。你为什么不回答而不是评论?
-
这不是 Emacs 的默认行为,因此罪魁祸首很可能是您自己添加的库(或者可能是
default.el或site-start.el中的某些内容,如果它们存在于默认加载中的任何位置-path,但现在这并不常见)。 -
您可以通过运行
emacs -q来检查它是否在您的站点配置中。这不会加载您的init.el,但会加载site-start.el。因此,如果emacs -q导致该行为,则它在site-start.el中。这不太可能;它可能在您的init.el中。