Emacs:在缓冲区评估期间将参数传递给劣质Python shell

Sam*_*mmy 6 python ide emacs

最近我开始使用Emacs作为Python IDE,它不是很直观......我现在正在努力解决的问题是当使用Cc Cc评估缓冲区时如何将命令行参数传递给下级python shell.感谢帮助.

Sea*_*ean 7

这看起来不太容易; 由python.el模块管理的劣质过程被设计为在python-send-buffer(和朋友)的许多调用中持久存在.我发现的一个解决方案是编写自己的函数,sys.argv在下级过程中以编程方式设置:

(defun python-send-buffer-with-my-args (args)
  (interactive "sPython arguments: ")
  (let ((source-buffer (current-buffer)))
    (with-temp-buffer
      (insert "import sys; sys.argv = '''" args "'''.split()\n")
      (insert-buffer-substring source-buffer)
      (python-send-buffer))))
Run Code Online (Sandbox Code Playgroud)

*scratch*缓冲区中执行此功能和/或将其保存在.emacs文件中,然后,如果需要,将其绑定到方便的键序列. C-c C-a似乎没有被使用python-mode,所以也许:

(global-set-key "\C-c\C-a" 'python-send-buffer-with-my-args)
Run Code Online (Sandbox Code Playgroud)

该命令将提示您输入要使用的参数,然后将源缓冲区复制到临时缓冲区中,并在其前面添加一个代码片段,该代码片段设置sys.argv为您提供的参数列表,最后将调用python-send-buffer.

上面的代码将天真地分割您在空格上键入的字符串,因此如果您需要提供其中包含空格的参数,则需要更复杂的算法.