12

在 linux 上使用 emacs 23.3.1 的两个相关问题:

首先,为什么我不能设置show-trailing-whitespaceto twith的值,setq如下所示?当我将setq版本放入其中时,.emacs它不会更改值(如功能上和使用所示M-x describe-variable)。

(setq show-trailing-whitespace t)  ; Does not change variable value or give error

(custom-set-variables              ; Sets show-trailing-whitespace as expected
 '(show-trailing-whitespace t))

其次,如何在t和之间切换值nil?我认为这个答案正是我所需要的,但在这种情况下它不起作用。我用了:

(global-set-key "\M-ow" 'tf-toggle-show-trailing-whitespace)

(defun tf-toggle-show-trailing-whitespace ()
    "Toggle show-trailing-whitespace between t and nil"
    (interactive)
    (setq show-trailing-whitespace (if (= show-trailing-whitespace nil) t nil))
    (redraw-display))

当我点击时,M-ow我得到一个错误Wront type argument: number-or-marker-p, nil。有任何想法吗?

4

2 回答 2

19

第一:正如describe-variable告诉你show-trailing-whitespace的是一个缓冲区变量。这意味着做 a只为当前缓冲区设置它,因此在文件setq中完成时没有效果。.emacs要拥有类似于您需要使用什么自定义的东西,setq-default而不是setq. 这将适用于所有缓冲区。

setq第二:对于切换,如果您想在每个缓冲区的基础上切换,您可能想要使用。您得到的错误是您使用=which 来测试两个数字是否相等。使用 以更简洁的方式进行切换not。作为旁注,该(redraw-display)命令似乎没有做任何事情。

(defun tf-toggle-show-trailing-whitespace ()
  "Toggle show-trailing-whitespace between t and nil"
  (interactive)
  (setq show-trailing-whitespace (not show-trailing-whitespace)))
于 2012-07-28T14:32:19.830 回答
0

写(eq show-trailing-whitespace nil)

或更短——但相反——

(如果显示尾随空白

于 2012-07-28T12:39:23.923 回答