Emacs Lisp中的动态变量
我有这样的代码Emacs Lisp中的动态变量,emacs,elisp,Emacs,Elisp,我有这样的代码 (defun work () (interactive) (case major-mode ('javascript-mode (setq js-indent-level (if (eq js-indent-level 2) 4 2))) ('css-mode (setq cssm-indent-level (if (eq cssm-indent-level 2) 4 2))) ('nxml-mode (setq nxml-child-indent
(defun work ()
(interactive)
(case major-mode
('javascript-mode (setq js-indent-level (if (eq js-indent-level 2) 4 2)))
('css-mode (setq cssm-indent-level (if (eq cssm-indent-level 2) 4 2)))
('nxml-mode (setq nxml-child-indent (if (eq nxml-child-indent 2) 4 2)))
(t (setq c-basic-offset (if (eq c-basic-offset 2) 4 2)))))
缩进级别2和4之间的切换(我使用4个缩进空格,但工作需要2个),是否可以将代码每行都压缩为类似以下内容:
(defun work ()
(interactive)
(let ((var (case major-mode
('javascript-mode 'js-indent-level)
('css-mode 'cssm-indent-level)
('nxml-mode 'nxml-child-indent)
(t 'c-basic-offset))))
;; like C pointers
(setf (pointer var) (if (eq (pointer var) 2) 4 2))))
或
如果我在缩进变量列表中有缩进变量
是否需要使用宏或eval来执行此操作?您可以尝试以下操作,而不是使用
setf
-构造
(set var (if (eq (eval var) 2) 4 2))
它应该可以工作,但我没有测试它。您需要和
您不使用文件或目录局部变量有什么原因吗?@immerr这些是什么?
M-:(信息)(emacs)文件变量”)
和M-:(信息)(emacs)目录变量”)
给出一个很好的调查。(按M-:
然后从这里复制粘贴命令。然后按enter
。您将直接进入右侧的信息节点。)@Tobias,在手册中查找此信息的另一种方法是C-h r M“文件变量”
和C-h r M“目录变量”
加上制表符的完成:)@Tobias我不明白局部变量在这里有什么帮助。
(set var (if (eq (eval var) 2) 4 2))
(defun work ()
(interactive)
(let ((var (cdr (assoc major-mode indent-vars))))
(set var (if (eq (symbol-value var) 2) 4 2))))