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で選択している行を実行する |
