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