[neovimプラグイン] ipython実行環境を作った


neovimでpythonコードを書いている時に、エディタから抜けずにそのまま実行したくなります。
quickrunasyncrunだと実行した後に対話的な変数の操作やデータの分析ができません。
Vimの学習も兼ねて、neovimの標準機能であるターミナルモード(Vim8にもありますが)を利用して編集中のPythonスクリプトをIpythonに渡して実行するプラグインを作ることにしました。

GitHubリポジトリ(szkny/Ipython)
 

概要

ターミナルモードを利用してipythonコンソールを呼び出します。
:Ipythonコマンドで編集中のスクリプトを実行後、<C-w>wで操作ウィンドウを切り替えれば対話環境に移れます
内部ではneovim標準のjobsend関数で%run filename.pyをipythonに送ります。

  • このプラグインでできること
    • Ipythonコンソールでスクリプトを実行 (実行後も変数、メソッドを保持)
    • 編集中スクリプトの部分実行 (ヴィジュアルモードで選択した領域の実行)
    • Ipythonの機能をおおよそ実行可能

デモ画面

インストール

vim-plugの場合、init.vimに以下を追記

Plug 'szkny/SplitTerm'
Plug 'szkny/Ipython'

neovimを開いて下記コマンドを実行

:PlugInstall

コマンド

使い方 説明
:Ipython 現在編集中のPythonスクリプトを実行する (ipythonウィンドウが無ければ開く )
:VIpython Visual modeで選択している行を実行する (ipythonウィンドウが無ければ開く )

キーマッピング

init.vimに以下を追加。
(デフォルトではキーマップは設定されていません)

nmap  <leader>ip  :Ipython<CR>
vmap  <leader>ip  :VIpython<CR>

オプション

Ipythonの起動オプションやインポートパッケージをinit.vimに記述できます。
以下をinit.vimにリストで定義。

" ipythonコマンドのコマンドライン引数
let g:ipython_startup_options = ['--no-confirm-exit']

" ipython起動時実行するコマンドリスト
let g:ipython_startup_command = [
            \'from pylab import *',
            \'import pandas as pd',
            \'pd.options.display.max_rows = 10',
            \'pd.options.display.max_columns = 10',
            \'pd.options.display.precision = 3']

" ウィンドウ幅 ( 0 にすると自動で設定)
let g:ipython_window_width = 0

以下はデフォルト設定

let g:ipython_startup_options = [
            \'--no-confirm-exit',
            \'--colors=Linux',
            \'--no-banner']

let g:ipython_startup_command = []

let g:ipython_window_width = 10

関数

名前 説明
ipython#open() ipythonウィンドウを開く
ipython#close() ipythonウィンドウを閉じる
ipython#exist() ipythonウィンドウの存在確認
ipython#run() 現在編集中のPythonスクリプトを実行する
ipython#run_visual() Visual modeで選択している行を実行する