Emacs:设置和切换show-trailing-whitespace

时间:2012-07-28 12:14:39

标签: emacs

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

首先,为什么我不能将show-trailing-whitespace的值设置为t 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))

其次,如何在tnil之间切换值?我认为this answer正是我所需要的,但在这种情况下它不起作用。我用过:

(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。有什么想法吗?

2 个答案:

答案 0 :(得分:18)

首先:因为describe-variable告诉你show-trailing-whitespace是一个缓冲变量。这意味着执行setq仅为当前缓冲区设置它,因此在.emacs文件中完成后无效。要使用类似于自定义的内容,您需要使用setq-default而不是setq。这适用于所有缓冲区。

第二:对于切换,如果要在每个缓冲区的基础上切换缓冲区,则可能需要使用setq。您得到的错误是您使用=来测试两个数字是否相等。使用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)))

答案 1 :(得分:0)

写(eq show-trailing-whitespace nil)

或更短 - 但反转 -

(如果show-trailing-whitespace