5 KiB
This is a straight port of julia-vterm.el. I only modified the code slightly to deal correctly with python environments
and play nicely with ipython
.
python-vterm
Python-vterm provides a major-mode for an inferior Python process (or REPL) that runs in vterm, and a minor-mode that extends python-mode with the ability to interact with the inferior Python process. This is particularly useful for fancy repls like ipython
or ptpython
.
The functionalities required for typical REPL interaction have been implemented. While I would like to keep this package simple, suggestions are always welcome.
If you want to use Python with Org Babel, please consider trying ob-python-vterm. It uses python-vterm and provides a solid babel development experience with session and asynchronous execution support.
Installation
You can install this package from MELPA. The package name is “python-vterm”.
For manual installation, download python-vterm.el
into somewhere in your local directory and use package-install-file
command. Please make sure python-mode and emacs-libvterm are installed and configured correctly.
Turn on python-vterm-mode
in a python-mode
buffer to use this package. A symbol “⁂” in the mode line indicates that the python-mode buffer is ready to interact with the python-vterm REPL. Add the following line to your init file to enable python-vterm-mode
in python-mode
buffers automatically.
(add-hook 'python-mode-hook #'python-vterm-mode)
By default, the command named python
in your PATH
is used. You can use a Python executable in any path by setting the python-vterm-repl-program
variable to its absolute path. The variable can contain switches for the python
command. For example, you can use a python
executable at a certain path, with 4 threads enabled, by the line like the following.
(setq python-vterm-repl-program "ipython -i")
How to use
M-x python-vterm-repl
(or M-x python
if no other packages define it before python-vterm is loaded) opens an inferior Python REPL buffer.
In a python script buffer with python-vterm-mode
on, you can open a Python REPL with M-x python-vterm-switch-to-repl-buffer
(or C-c C-z
). See below for other commands.
Both of the above operations open a REPL with the default session name main
. You can specify a different session name by using the prefix argument C-u
. A new session will be created and opened if there is no REPL with that session name.
You can also specify a session name by defining a file local variable python-vterm-session
(or python-session
if no other packages pre-define it). If the variable is defined, C-c C-z
will open a REPL with that session name.
Key bindings
python-vterm-mode
Key Command / Description ------------------------------------------------------------------------------------------ C-c C-z python-vterm-switch-to-repl-buffer Switch to the paired REPL buffer or to the one with a specified session name. With prefix ARG, prompt for session name. C-c C-c python-vterm-send-region-or-current-line Send the content of the region if the region is active, or send the current line. C-c C-b python-vterm-send-buffer Send the whole content of the script buffer to the Python REPL line by line. C-c C-r python-vterm-send-run-buffer-file Send a line to evaluate the buffer's file using ipython %run magic. This is only useful when using ipython. C-c C-d python-vterm-send-cd-to-buffer-directory Send %cd function call to the Python REPL to change the current working directory of REPL to the buffer's directory.
python-vterm-repl-mode
Key Command / Description ------------------------------------------------------------------------------------------ C-c C-z python-vterm-repl-switch-to-script-buffer Switch to the script buffer that is paired with the current Python REPL buffer. M-k python-vterm-repl-clear-buffer Clear the content of the Python REPL buffer. C-c C-t python-vterm-repl-copy-mode Enter copy mode.
python-vterm-repl-mode (copy mode)
Key Command / Description ------------------------------------------------------------------------------------------ C-c C-t python-vterm-repl-copy-mode Exit copy mode. <return> python-vterm-repl-copy-mode-done Copy the region to the kill ring and exit copy mode. C-c C-r vterm-reset-cursor-point Call the vterm command that moves point to where it should be.