Emacs: 设置/重置 Python 调试断点
我在用 Python 调试器 pdb。我用 emacs 来编写 Python 程序,并且使用 python-mode.el。我希望让 emacs 更加直观易用。所以我需要一些关于 Python 程序(.py)的帮助:
每当我按下 'F9' 键时,emacs 应该在当前行插入 "import pdb; pdb.set_trace();" 这句话,并把当前行移动到下一行。这样这句话就能在同一行,智能缩进可能会很有帮助。
无论在 Python 代码的哪里出现 "import pdb; pdb.set_trace();" 这句话,emacs 应该在左侧显示一个指示器,并高亮显示那一行。
当我在当前行按下 'Alt-F9' 键,emacs 如果找到 "import pdb; pdb.set_trace();" 这句话,就应该把这一行删除,并把当前行移动到上一行。
每当我按下 "F8" 键时,emacs 应该跳转到同一文档中的 "import pdb; pdb.set_trace();"。
我正在努力学习 elisp,希望能尽快掌握 lisp,以便自己定制 emacs。非常感谢你的回答。
这个答案对我和其他找到这个解决方案的人来说都将非常有用。
2 个回答
我发现Xah的Elisp教程是了解Emacs Lisp编程基础的一个很好的起点。那里还有一些SteveY的文章,这些文章讲述了一些你可能会觉得有用的学习基础的技巧。
如果你认真想要制作一个改进版的Python模式,建议你看看编写GNU Emacs扩展,这个资料可以下载成PDF格式。
最后,对我来说,最有用的资源其实就是Emacs本身。我经常使用M-x apropos
和M-x describe-key
来弄清楚内置函数是怎么工作的,以及是否已经有现成的功能可以满足我的需求。
你想要实现的具体功能,其实可以通过简单使用insert
和一些搜索/替换的功能来完成,所以这将是一个很好的起点。
待办事项 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 Elisp书是一个很好的起点。
希望这对你有帮助。