在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))
其次,如何在t
和nil
之间切换值?我认为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
。有什么想法吗?
答案 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