在emacs中使用python-mode切换缓冲区设置?

时间:2012-03-28 08:09:41

标签: emacs python-mode

我已经使用了emacs一段时间但不熟悉lisp编程。仅仅几天我开始在emacs上编写Python代码。我发现python-mode非常有用,我想进一步探索它。我在互联网上找到了一些emacs嘴唇功能,稍微考虑了一下,使界面用户友好。我正在努力实现以下行动

我通常使用2个垂直窗口启动emacs,一个使用python源,另一个使用shell。我应该能够使用键盘绑定

  • 在缓冲区之间切换(工作)
  • 执行某个地区(工作)     但用shell缓冲区替换源缓冲区。我想在原始shell缓冲区中执行选定的区域。
  • 执行一条线(工作)     但与上述问题相同。当我说,该行应该在python shell中执行而不替换任何缓冲区。所以复制该行,切换到python shell,执行line,切换回python源缓冲区。

我无法实现上述切换操作。以下是我的init.el文件中的代码

(defun goto-python-shell ()
  "Go to the python command window (start it if needed)"
  (interactive)
  (setq current-python-script-buffer (current-buffer))
  (if (boundp 'current-python-shell-buffer)
    (switch-to-buffer-other-window current-python-shell-buffer)
    (py-shell))
  (end-of-buffer)
 )

 (defun goto-python-source ()
   "switch back to source window"
   (interactive)
  (setq current-python-shell-buffer (current-buffer))
   (switch-to-buffer-other-window current-python-script-buffer)
 )

 (defun py-execute-statement-and-step ()
   "select a statement, submit as a region and then step forward"
   (interactive)
   (beginning-of-line 1)
   (let ((beg (point)))
     (py-next-statement 1)
     ; if last statement.
        (if (= (point) beg) (end-of-buffer ))
 ; (switch-to-buffer-other-window current-python-shell-buffer)
   (py-execute-region beg (point))
   (switch-to-buffer-other-window current-python-script-buffer)
   )
 )

 ; some key bindings
 (define-key python-mode-map (quote [f9]) 'py-execute-statement-and-step)
 ;(define-key python-mode-map (quote [f10]) `py-execute-region)
 ;py-shell-switch-buffers-on-execute
 (define-key python-mode-map (quote [f10]) `py-shell-switch-buffers-on-execute)
 (define-key python-mode-map (quote [f11]) `py-execute-buffer)
 (define-key python-mode-map (quote [f12]) `goto-python-shell)
 (define-key py-shell-map (quote [f12]) `goto-python-source)

请建议。

此外,由于我是python-mode的新手,有人可以使用类似于上面的python-mode共享很好的初始化吗?

非常感谢你的帮助。

此致 AJ

3 个答案:

答案 0 :(得分:3)

您应该查看this question的第一个答案并自定义py-shell-switch-buffers-on-execute变量。

这样您就不需要所有自定义函数来使python-mode按您的需要工作(即保持源缓冲区处于活动状态)

答案 1 :(得分:2)

我认为您正在尝试重新发明Emacs 24中的可用内容(至少在评估内容中)。尝试Emacs 24.在编辑Python源代码时,可以按 C-c C-c 来评估缓冲区并按 C-c C-r 来评估区域。您不必显式启动Python shell。

我认为没有直接支持评估线和步骤。您可以通过按键 C-SPC C-n C-c C-r 来实现。您的重点将保留在源代码中,无需在源代码和shell之间进行显式切换。

FWIW,我每天都在合理的时间内使用Emacs 24,而且我没有遇到任何稳定性问题。

答案 2 :(得分:0)

以下更改的工作就像一个魅力。 f9逐行执行,f10执行基于区域的执行。在我禁用py-shell-switch-buffers-on-execute之后,curser仍保留在脚本窗口中。

(defun py-execute-statement-and-step ()
  "select a statement, submit as a region and then step forward"
  (interactive)
  (beginning-of-line 1)
  (let ((beg (point)))
    (py-next-statement 1) 
    ; if last statement.
        (if (= (point) beg) (end-of-buffer ))
        (py-execute-region beg (point))
        (next-line)
  )
) 

(custom-set-variables
'(py-shell-switch-buffers-on-execute nil))

(define-key python-mode-map (quote [f9]) 'py-execute-statement-and-step)
(define-key python-mode-map (quote [f10]) `py-execute-region)