我尝试在Emacs中按顺序运行几个命令。这些命令都不需要参数(indent-region,untabify和delete-trailing-whitespace)。我尝试按照emacs-key-binding-for-multiple-commands上的旧帖子提出以下解决方案:
(defun format-properly ()
"Run `indent-region', `untabify' and `delete-trailing-whitespace' in sequence."
(interactive)
(indent-region)
(untabify)
(delete-trailing-whitespace))
(global-set-key (kbd "C-c a b c") 'format-properly)
当我尝试运行它时,这给出了以下错误消息:“参数数量错误:(2.3),0”。
由于我没有使用lisp的经验,我不知道该怎么做,并且会对任何建议感到高兴。 :)
谢谢! 朱莉
答案 0 :(得分:4)
为了建立法律列表的注释,交互式命令通常采用非可选参数,即使您没有明确提供它们。有一种特殊的方法可以声明一个带有区域的交互式命令:(interactive "r")
,它会自动将区域传递给命令。
(defun format-properly (b e)
"Run `indent-region', `untabify' and `delete-trailing-whitespace' in sequence."
(interactive "*r")
(when (use-region-p)
(save-restriction
(narrow-to-region b e)
(indent-region (point-min) (point-max))
(untabify (point-min) (point-max))
(delete-trailing-whitespace (point-min) (point-max)))))
尝试使用interactive
(C-h o
)查看describe-symbol
以及您感兴趣的任何其他函数或变量的文档。