如何在emacs中清除ipython缓冲区?

时间:2011-11-08 17:57:22

标签: emacs ipython

我正在使用ipython.el在emacs缓冲区中运行和交互式ipython shell。我想知道是否有办法清除屏幕?由于它没有在终端上运行,import os; os.system('CLS')技巧将无效。感谢。

3 个答案:

答案 0 :(得分:9)

看起来ipython基于comint,这意味着以下代码应该适合您(使用M-x my-clear或您最喜欢的键绑定调用):

(defun my-clear ()
  (interactive)
  (let ((comint-buffer-maximum-size 0))
    (comint-truncate-buffer)))

我发布了一些其他选项以回应this question

答案 1 :(得分:1)

这将清除屏幕当前会话变量(使用%reset):

(defun my-reset-ipython ()
  "Clear Emacs *Python* buffer and resets iPython variables.

Prints date and time of reset to iPython console and to
*Messages* buffer.

Assumes python has been configured to use iPython:

  (setq python-shell-interpreter \"ipython\")

This function does not reset the iPython console line numbering
or history (either because you can't do that in an iPython
console or the author couldn't find out how!)."
  ;; Allow function to be called via M-x
  (interactive)
  ;; Define variables: date-time string, message string, command to be passed to python
  ;; Requires let* in order for python-command to resolve reset-time and reset-statement
  (let* ((reset-time (format-time-string "%A, %B %e, %Y @ %-I:%M %p"))
         (reset-statement "Reset iPython on ")
         (python-command (concat "print('" reset-statement reset-time "')" )))
    ;; Reset iPython console
    (python-shell-send-string "%reset -f" "*Python*")
    ;; Print message to iPython console indicating reset
    (python-shell-send-string  python-command "*Python*")
    ;; Allow command to be called from another buffer
    (with-current-buffer "*Python*"
      (comint-clear-buffer))
    ;; Print message to minibuffer and *Messages*
    (message (concat reset-statement "%s") reset-time)))

;; Mimic default binding for comint-clear-buffer (C-c M-o)
(define-key inferior-python-mode-map (kbd "C-c M-l") 'my-reset-ipython)

答案 2 :(得分:0)

C-c M-o运行comint-clear-buffer命令(位于 下层python模式映射),这是一个交互式编译的Lisp 功能。

它绑定到C-c M-o。

(comint-clear-buffer)

清除缓冲区。