如何在emacs中运行多个命令?

时间:2017-05-24 02:15:57

标签: function emacs

我尝试在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的经验,我不知道该怎么做,并且会对任何建议感到高兴。 :)

谢谢! 朱莉

1 个答案:

答案 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)))))

尝试使用interactiveC-h o)查看describe-symbol以及您感兴趣的任何其他函数或变量的文档。