想要一个elpy的的C_c C_c的功能,

在使用elpy补全,并且使用ipython解释器时,发现在elpy模式下,Ctrl-c Ctrl-c直接将代码发送到ipython,在ipython就会显示代码和结果,那样的一个效果通过elisp怎样实现呢,

C-h f term-mode

C-h f term

C-h f comint-mode

C-h f comint-run

正在查看着改,

C-h f term-send TAB

C-h f comint-send TAB

M-x shell C-h k RETURN

最近正好研究了下 python-mode 的 C-c C-c 功能。

ps: LZ 说的 C-c C-c 将代码发送到 ipython,这个其实是 python-mode 的功能,并不是 elpy 这个插件的功能。

关于怎样实现?我感觉最重要的是知道以下几个点:

  1. 启动一个 ipython 进程,你可以通过标准输入(stdin)给 ipython 发送代码,然后 ipython 会把输出放到标准输出(stdout)。Emacs 就是利用了这个特性来实现自己和 ipython 进程的通信的。
  2. 虽然 Emacs 里面的 ipython buffer 看着和 terminal 中运行的 ipython 长得一样,但是原理是有差别的。Emacs 非常小心的(通过正则等手段)处理了 ipython buffer 的输入,然后发送给 ipython 进程;同时,它还非常小心的处理了 ipython 进程的输出,将它显示在 ipython buffer 中。比如,你可以看这段 elisp 代码:https://github.com/emacs-mirror/emacs/blob/master/lisp/progmodes/python.el#L2000
  3. comint-mode 可以让上面两个步骤实现起来更方面

自己也写了一个小的工具函数,用于平常 debug:https://github.com/cosven/.emacs.d/blob/master/elisp/init-python.el#L33

我看了c-c c-c里面调用的函数,确实是 elpy里面写的,主要是elpy里面该函数可以直接显示结果,我就想得到c-c c-c调用ipython并直接显示结果