editors.rst
114 lines
| 4.5 KiB
| text/x-rst
|
RstLexer
Brian Granger
|
r2277 | .. _editors: | ||
==================== | ||||
Editor configuration | ||||
==================== | ||||
IPython can integrate with text editors in a number of different ways: | ||||
Thomas Kluyver
|
r5450 | * Editors (such as `(X)Emacs`_, vim_ and TextMate_) can | ||
Brian Granger
|
r2277 | send code to IPython for execution. | ||
* IPython's ``%edit`` magic command can open an editor of choice to edit | ||||
a code block. | ||||
The %edit command (and its alias %ed) will invoke the editor set in your | ||||
environment as :envvar:`EDITOR`. If this variable is not set, it will default | ||||
to vi under Linux/Unix and to notepad under Windows. You may want to set this | ||||
variable properly and to a lightweight editor which doesn't take too long to | ||||
start (that is, something other than a new instance of Emacs). This way you | ||||
can edit multi-line code quickly and with the power of a real editor right | ||||
inside IPython. | ||||
Thomas Kluyver
|
r5450 | You can also control the editor by setting :attr:`TerminalInteractiveShell.editor` | ||
in :file:`ipython_config.py`. | ||||
Brian Granger
|
r2277 | |||
TextMate | ||||
======== | ||||
Currently, TextMate support in IPython is broken. It used to work well, | ||||
but the code has been moved to :mod:`IPython.quarantine` until it is updated. | ||||
Thomas Kluyver
|
r5450 | Vim | ||
=== | ||||
Brian Granger
|
r2277 | |||
Thomas Kluyver
|
r5450 | Paul Ivanov's `vim-ipython <https://github.com/ivanov/vim-ipython>`_ provides | ||
powerful IPython integration for vim. | ||||
Brian Granger
|
r2277 | |||
.. _emacs: | ||||
(X)Emacs | ||||
======== | ||||
If you are a dedicated Emacs user, and want to use Emacs when IPython's | ||||
``%edit`` magic command is called you should set up the Emacs server so that | ||||
new requests are handled by the original process. This means that almost no | ||||
time is spent in handling the request (assuming an Emacs process is already | ||||
running). For this to work, you need to set your EDITOR environment variable | ||||
to 'emacsclient'. The code below, supplied by Francois Pinard, can then be | ||||
used in your :file:`.emacs` file to enable the server:: | ||||
(defvar server-buffer-clients) | ||||
(when (and (fboundp 'server-start) (string-equal (getenv "TERM") 'xterm)) | ||||
(server-start) | ||||
(defun fp-kill-server-with-buffer-routine () | ||||
(and server-buffer-clients (server-done))) | ||||
(add-hook 'kill-buffer-hook 'fp-kill-server-with-buffer-routine)) | ||||
Thanks to the work of Alexander Schmolck and Prabhu Ramachandran, | ||||
currently (X)Emacs and IPython get along very well in other ways. | ||||
.. note:: | ||||
You will need to use a recent enough version of :file:`python-mode.el`, | ||||
along with the file :file:`ipython.el`. You can check that the version you | ||||
have of :file:`python-mode.el` is new enough by either looking at the | ||||
revision number in the file itself, or asking for it in (X)Emacs via ``M-x | ||||
py-version``. Versions 4.68 and newer contain the necessary fixes for | ||||
proper IPython support. | ||||
The file :file:`ipython.el` is included with the IPython distribution, in the | ||||
directory :file:`docs/emacs`. Once you put these files in your Emacs path, all | ||||
you need in your :file:`.emacs` file is:: | ||||
(require 'ipython) | ||||
This should give you full support for executing code snippets via | ||||
IPython, opening IPython as your Python shell via ``C-c !``, etc. | ||||
You can customize the arguments passed to the IPython instance at startup by | ||||
setting the ``py-python-command-args`` variable. For example, to start always | ||||
in ``pylab`` mode with hardcoded light-background colors, you can use:: | ||||
(setq py-python-command-args '("-pylab" "-colors" "LightBG")) | ||||
If you happen to get garbage instead of colored prompts as described in | ||||
the previous section, you may need to set also in your :file:`.emacs` file:: | ||||
(setq ansi-color-for-comint-mode t) | ||||
Notes on emacs support: | ||||
Thomas Kluyver
|
r5450 | .. This looks hopelessly out of date - can someone update it? | ||
Brian Granger
|
r2277 | * There is one caveat you should be aware of: you must start the IPython shell | ||
before attempting to execute any code regions via ``C-c |``. Simply type | ||||
``C-c !`` to start IPython before passing any code regions to the | ||||
interpreter, and you shouldn't experience any problems. This is due to a bug | ||||
in Python itself, which has been fixed for Python 2.3, but exists as of | ||||
Python 2.2.2 (reported as SF bug [ 737947 ]). | ||||
* The (X)Emacs support is maintained by Alexander Schmolck, so all | ||||
comments/requests should be directed to him through the IPython mailing | ||||
lists. | ||||
* This code is still somewhat experimental so it's a bit rough around the | ||||
edges (although in practice, it works quite well). | ||||
* Be aware that if you customized ``py-python-command`` previously, this value | ||||
will override what :file:`ipython.el` does (because loading the customization | ||||
variables comes later). | ||||
Thomas Kluyver
|
r5450 | .. _`(X)Emacs`: http://www.gnu.org/software/emacs/ | ||
.. _TextMate: http://macromates.com/ | ||||
.. _vim: http://www.vim.org/ | ||||