【问题标题】:Emacs: Set/Reset python debug breakpointEmacs:设置/重置 python 调试断点
【发布时间】:2011-01-20 21:20:44
【问题描述】:

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

  1. 每当我按“F9”键时,emacs 应该输入“import pdb; pdb.set_trace();”当前行中的语句并将当前行移至下一行。 句子要在同一行。智能缩进可能会有很大帮助。

  2. 无论哪里“导入 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();”在同一个缓冲区中。

我正在努力学习 elisp 并很快赶上 lisp 以自己定制 emacs。我会很感激你的回答。

对于我和其他认为此解决方案非常有用的人来说,答案应该足够好。

【问题讨论】:

    标签: python debugging emacs elisp customization


    【解决方案1】:

    要做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

    【讨论】:

    • 对于 2,我关注了我的另一个问题 stackoverflow.com/questions/2242572/…,它解决了目的。我所要做的就是用 import pdb*** 替换 TODO 字符串。你的解决方案摇滚.. 非常感谢
    【解决方案2】:

    我发现Xah's Elisp Tutorial 是了解 Emacs Lisp 编程基础的绝佳起点。 There are also 不久前的一些 SteveY 文章介绍了您可能会发现对学习基础知识有用的技术。

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

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

    您想要看起来像的具体事情可以通过简单地使用insert 和一些搜索/替换功能来完成,所以这将是一个很好的起点。

    【讨论】:

    • 感谢您提供精彩的参考资料。今年我将开始学习基本的 elisp。
    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多