wiki:linux/vim/Vim - ZeroMQ - iPython: Eine IDE

vim ~~ ZeroMQ ~~ iPython IDE

In der Regel braucht es nicht wirklich mehr als die um äußerst nützliche Features aufgepeppte iPython-Shell.

Wenn ich allerdings an Funktionen oder kleinen Klassen experimentiere, bietet sich folgende Lösung an. Dabei schreibe ich Code nicht mehr direkt in der iPython-Shell sondern in einem vim-buffer. Via ZeroMQ sende ich den Code dann an iPython und erhalte die Ausgabe wieder in einem separaten vim-buffer.
Die Vorteile:

  • Code scrollt nicht nach jeder Ausführung weg
  • Änderungen sind wesentlich einfacher. Mehrzeiligen Code aus der iPython-History zu editieren macht nicht wirklich Freude...

So sieht das z. B. aus, wenn ich ein paar Zeilen Code (unterer buffer) ausführe (oberer buffer):

thumb_beispiel.jpeg
Zum Vergrößern auf Bild klicken...

Eine solche IDE ist relativ einfach gebaut:

  • ZeroMQ und pyzmq installieren, siehe ZeroMQ
  • ipy.vim ins Verzeichnis ~/.vim kopieren. Wenn das ipy.vim-Plugin per default bei .py-Dateien geladen werden soll, ins Verzeichnis ~/.vim/ftplugin/python kopieren.

Damit kann's losgehen:

  • iPython Console starten (kann desweiteren im Hintergrund bleiben, läuft bei mir immer irgendwo hinten auf Desktop 8 oder 9...)
    $ ipython console
    
  • vim mit ipy.vim-Plugin starten
    $ vim -S ~/.vim/ipy.vim
    

oder innerhalb vim das Kommando

:source ~/.vim/ipy.vim

absetzen.

  • Verbindung zu iPython herstellen (kernel-Nummer wird beim Start von iPython ausgegeben):
    :IPython --existing kernel-14292.json
    

oder ab iPython 0.12 einfach ohne Angabe der kernel-Nummer:

:IPython
  • Die IMHO lästigen balloon-tips, die das ipy.vim-plugin liefert, können noch mit
    :set noballooneval
    

deaktiviert werden.

Mit den folgenden beiden vim-mappings lässt sich nun Code aus vim heraus ausführen:

  • F5
    Gesamten Code im buffer ausführen, muss dazu aber gespeichert sein
  • Ctrl-S
    Einzelne Zeile oder markierten Bereich ausführen, funktioniert auch im insert-mode.

    Um <Ctrl-S> zur Verwendung freizugeben, muss der Eintrag

    stty stop undef

    in die ~/.bashrc eingetragen werden.

Um die gerade ausgeführte Vorgehensweise auf ein vim-Kommando zu reduzieren, habe ich folgendes bei mir angelegt:

  • Das 'ipy.vim'-plugin in 'IPython.vim' umbenennen
  • Eine 'ipy.vim' mit folgendem Inhalt anlegen:
    source ~/.vim/IPython.vim
    IPython
    set noballooneval
    

Somit reicht unter vim ein

:source ~/.vim/ipy.vim

zum Starten.

ANMERKUNG

raw_input() bzw. input() lassen sich auf diesem Wege nicht verwenden, da stdin nicht abgefangen werden kann.
Ich wusste auch mal eine Erklärung, aber die hab' ich nicht mehr... ;-)

Last modified 6 years ago Last modified on Oct 14, 2013, 4:26:42 PM