繁体   English   中英

Emacs:设置/重置 python 调试断点

[英]Emacs: Set/Reset python debug breakpoint

我使用 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。 我会很感激你的回答。

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

做 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) 虽然我已将其设置为 Cc 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 书是一个很好的起点。

高温高压

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM