emacs中带有自定义函数的错误类型参数commandp

emacs中带有自定义函数的错误类型参数commandp,emacs,elisp,Emacs,Elisp,我知道很多人都问过这样的问题, 但我读过很多类似的帖子,仍然不知道 怎么办。下面是.emacs中的elisp代码: ;; send line to python console (require 'python-mode) (defun py-execute-line-down () "execute python line and move cursor down" (progn (py-execute-line) (evil-next-line))) (add-hook 'p

我知道很多人都问过这样的问题, 但我读过很多类似的帖子,仍然不知道 怎么办。下面是.emacs中的elisp代码:

;; send line to python console
(require 'python-mode)
(defun py-execute-line-down ()
  "execute python line and move cursor down"
  (progn
  (py-execute-line)
  (evil-next-line)))
(add-hook 'python-mode-hook
    (lambda () (define-key python-mode-map (kbd "C-c C-j") 'py-execute-line-down)))

我还尝试将交互添加到函数中,但没有起作用。

只是为了在此处保留记录,这似乎起到了作用,但不确定它是否最佳:

;; send line to python console
(require 'python-mode)
(defun py-execute-line-down ()
  "execute python line and move cursor down"
  (interactive)
  (py-execute-line)
  (evil-next-line 1))
(defun kaiyin-pykeys ()
  "python mode custome keys"
  (local-set-key (kbd "C-c j") 'py-execute-line-down)
  )
(add-hook 'python-mode-hook 'kaiyin-pykeys)
根据丹的建议,我将上述内容改为:

;; send line to python console
(require 'python-mode)
(defun py-execute-line-down ()
  "execute python line and move cursor down"
  (interactive)
  (py-execute-line)
  (forward-line 1))
(define-key python-mode-map (kbd "C-c j") 'py-execute-line-down)

对于那些对python模式的源代码感兴趣的人,这里有一个指向原始海报可能正在使用的库的链接:最新版本有一个绿色下载链接。qed:interactive是您所需要的全部。我猜你在添加那一行后没有重新计算函数?还是你放错地方了?应该紧跟在docstring之后。还请注意,您也不需要包装程序。。。另外:对define key的调用不需要进入钩子,每次打开python缓冲区时都会对其进行计算。@phils的注释+1。并确保将interactive放在正确的位置:在文档字符串之后和函数体之前。链接一些类似的问题:,和。我建议将邪恶的下一行1替换为前进行1,以避免在您决定停止使用后一行时引入邪恶依赖。假设您希望在所有python缓冲区中绑定C-cj,我还建议您省去第二个defun和add hook组合,只需将以下内容放到.emacs文件中:define key python mode map kbd C-C j'py execute line down。