はじめに
「VimでPython Doctestを実行するプラグインを作成する (1)」の続きです.それなりに動くプラグインができましたので公開します.
https://github.com/daizutabi/unite-greater3
スクリーンショットを以下に示します.
greater3プラグイン
今回のプラグインはgreater3と名付けました.以下,ヘルプからの抜粋です.
greater3 プラグインは,Python doctestを実行します.標準出力・標準エラー出力にも対応しているので,Python モジュールの実行に使うこともできます.
概要
greater3 は編集中の Python ファイルの doctest を実行する Vim プラグインです。実行した doctest の結果は Unite インターフェースを用いて,一覧表示されます.一覧リストの中から元ファイルの doctest にジャンプしたり,doctest の出力を使って,元ファイルのソースコードを書き換えることができます.また,標準出力 stdout,標準エラー出力 stderr も Unite インターフェースに表示されますので,QuickRun の代わりに使用することができます.実行ごとにimport 文で指定されるモジュールのインポートを行わないので,起動時間の短縮が期待できます.
要件:
- Vim 7.4 以降
- Python 3.5 以降
最新版:
http://github.com/daizutabi/unite-greater3
現在のバッファを実行
:Unite greater3
ショートカットキーの割り当て.例:F10に割り当てる場合.~/vimfiles/after/ftplugin/python.vim
などで,
nnoremap<silent><buffer><F10> :<C-u>Unite greater3<CR>
Unite バッファでの操作
- d: カーソル位置にある doctest の Want/Got の表示/非表示をトグルする.
- b: すべての doctest の Want/Got の表示/非表示をトグルする.
- e: doctest の実行範囲をカーソル位置/ファイル全体の間でトグルする.
- yy: doctest の実行結果で元ファイルのソースコードを置き換える.
キーマッピング
Unite greater3 の実行をショートカットキーに割り当てることができます.~/vimfiles/after/ftplugin/python.vim
などで,
nnoremap<silent><buffer><F10> :<C-u>Unite greater3<CR>
とします.
Unite バッファでのキーマッピングは,標準のアクションに対してエイリアスを設定することで行っています.具体的には,greater3 ソースの alias_tableを以下のように設定しています.
alias_table = {'*': {'delete': 'toggle','bookmark': 'toggle_entire',
\ 'edit': 'entire','yank': 'replace'}}
この設定は g:greater3.alias
で変更できます.
設定
グローバル変数 g:greater3
を使って動作をカスタマイズできます.
デフォルトの設定は,Pythonファイルが最初に読み込まれたタイミングで実行されます.それを上書きするためには,~/vimfiles/after/ftplugin/python.vim
等に上書きする設定を書いてください.
ステータスラインプラグインとの連携
g:greater3.statusline でステータスラインプラグインとの連携を設定します.現在は,lightline との連携をサポートしています.
g:greater3.statusline = 'lighline' とすることで,lightline との連携が有効になります.具体的には doctest の結果をステータスラインに色付きで表示します.実際には,上記の設定はデフォルトで行われます.
.vimrc/_vimrc ファイルには以下のように設定してください.
" Unite がステータスラインを上書きするの禁止します.letg:unite_force_overwrite_statusline =0" g:lightline の acitve 要素の好きな場所に 'greater3' を配置します." 例えば,letg:lightline = {
\ 'colorscheme': 'solarized',
\ 'mode_map': {'c': 'NORMAL'},
\ 'active': {
\ 'left': [['mode','paste'],
\ ['fugitive','filename','greater3']],
\ }
\}
'greater3' が lightline の展開コンポーネントとして扱われます.