Emacs:设置/重置python debug breakpoint

时间:2010-02-25 06:43:06

标签: python debugging emacs elisp customization

我使用python debugger pdb。我使用emacs进行python编程。我使用python-mode.el。我的想法是使emacs直观。所以我需要python程序的以下帮助(.py)

  1. 每当我按'F9'键时,emacs应该输入“import pdb; pdb.set_trace();”当前行中的语句并将当前行移动到下面的一行。 句子在同一行。聪明的缩进可能会有所帮助。

  2. “import pdb; pdb.set_trace();”语句在python代码中显示,emacs应显示左侧指示符并突出显示该行。

  3. 当我在当前行按“Alt-F9”键时,emacs找到“import pdb; pdb.set_trace();”声明然后,emacs应该删除“import pdb; pdb.set_trace();”并将当前行移动到一行。

  4. 每当我按“F8”键,emacs就会跳转到“import pdb; pdb.set_trace();”在同一个缓冲区中。

  5. 我正在尝试学习elisp并尽快赶上lisp以自行定制emacs。我将非常感谢你的回答。

    对我来说答案应该足够大,而找到这个解决方案的其他人也非常有用。

2 个答案:

答案 0 :(得分:8)

做1)

(defun add-py-debug ()  
      "add debug code and move line down"  
    (interactive)  
    (move-beginning-of-line 1)  
    (insert "import pdb; pdb.set_trace();\n"))  

(local-set-key (kbd "<f9>") 'add-py-debug)

要做2)您可能需要更改python模式的语法高亮,或者编写自己的次要模式。你必须调查font-lock才能获得更多。遗憾。

做3)虽然我把它设置为C-c F9而不是Alt-F9

(defun remove-py-debug ()  
  "remove py debug code, if found"  
  (interactive)  
  (let ((x (line-number-at-pos))  
    (cur (point)))  
    (search-forward-regexp "^[ ]*import pdb; pdb.set_trace();")  
    (if (= x (line-number-at-pos))  
    (let ()  
      (move-beginning-of-line 1)  
      (kill-line 1)  
      (move-beginning-of-line 1))  
      (goto-char cur))))  

(local-set-key (kbd "C c <f9>") 'remove-py-debug)

并做4)

(local-set-key (kbd "<f3>") '(lambda ()  
                                 (interactive)   
                                 (search-forward-regexp "^[ ]*import pdb; pdb.set_trace();")   
                                 (move-beginning-of-line 1)))

请注意,这不是世界上最好的elisp代码,但是我试图向你说明发生了什么,而不是让它完全惯用。如果你想用elisp做更多的事情,GNU Elsip书是一个很好的起点。

HTH

答案 1 :(得分:0)

我发现Xah's Elisp Tutorial是了解Emacs Lisp编程基础知识的绝佳起点。 There are also前几段史蒂夫的一些文章介绍了您可能会发现有助于学习基础知识的技巧。

如果您认真考虑修改Python模式,那么最好看看Writing GNU Emacs Extensions,它以PDF形式提供。

最后,对我来说最有用的资源实际上是Emacs本身。我经常使用M-x aproposM-x describe-key来弄清楚内置函数是如何工作的,以及是否已经存在了我想做的事情。

您希望通过简单使用insert以及一些搜索/替换功能来完成特定的事情,这将是一个很好的起点。