vimプラグインconqueterm:REPL環境の構築
REPL、すなわちread-eval-print loopは、Lisp、Emacsの
Slimeモードlispの作成は非常に便利です.Slimeでは次のように流れています.作成セグメントコード 実行小コード 結果を確認し、セグメントコード の作成を続行
エディタと解釈器を切り替える必要はありません.vimの下でもそうすることができますが、実現する可能性はあまり完璧ではありません.
ConqueTermはvimでTerminalをシミュレートし、実行することができる:ConqueTermSplit ipythonはウィンドウを分割し、そこでipython解釈器を実行することができる.別のウィンドウでpythonコードを選択し、を押すと選択コードを実行できます.これはEmacsのSlimeに近いですが、いくつかの欠点があります. pythonコードは自動的に実行できません.ConqueTermは選択したコードの余分なリターンを削除するので、手動でもう1つのリターンを押す必要があります. が実行されると、自動的にConqueTermウィンドウが選択され、カーソルがコードウィンドウに残っていることを望んでいます. 最初の問題は、autoload/conque_を注釈するだけで、ConqueTermプラグインのソースコードを変更することでしか解決できないようです.term.vim中関数conque_term#send_selectedのformat yanked text、またpaste_selectionはpasteメソッドに変更されました.
2番目の問題については、キーマッピングを定義して完了することができる.vimrcで定義:
これにより、を押すとデフォルトで現在のローがConqueTermに実行されます.
ワークフローは次のようになります. vim編集pythonファイル を開く:ConqueTermSplit ipython pythonインタプリタを開く(または、tp) コードを選択し、を押すと、ConqueTermで実行結果が直接表示されます. ruby、groovyなどを編集するのも同じで、ipythonを対応する解釈器に変えるだけでいいです.
Slimeモードlispの作成は非常に便利です.Slimeでは次のように流れています.
エディタと解釈器を切り替える必要はありません.vimの下でもそうすることができますが、実現する可能性はあまり完璧ではありません.
ConqueTermはvimでTerminalをシミュレートし、実行することができる:ConqueTermSplit ipythonはウィンドウを分割し、そこでipython解釈器を実行することができる.別のウィンドウでpythonコードを選択し、
" send selected text from another buffer
function! conque_term#send_selected(type) "{{{
let reg_save = @@
" save user's sb settings
let sb_save = &switchbuf
set switchbuf=usetab
" yank current selection
sil exe "normal! `<" . a:type . "`>y"
" format yanked text
"let @@ = substitute(@@, '^[\r
]*', '', '')
"let @@ = substitute(@@, '[\r
]*$', '', '')
" execute yanked text
sil exe ":sb " . g:ConqueTerm_BufName
sil exe 'python ' . g:ConqueTerm_Var . '.paste()'
" reset original values
let @@ = reg_save
sil exe 'set switchbuf=' . sb_save
" scroll buffer left
startinsert!
normal 0zH
endfunction "}}}
2番目の問題については、キーマッピングを定義して完了することができる.vimrcで定義:
" ConqueTerm
"let g:ConqueTerm_TERM = 'xterm'
noremap ,tb :ConqueTermSplit bash<CR>
noremap ,tp :ConqueTermSplit ipython<CR>
vnoremap <C-c><C-c> :<C-u>call conque_term#send_selected(visualmode())<CR><Esc><C-w>p
noremap <C-c><C-c> V:call conque_term#send_selected(visualmode())<CR><Esc><C-w>p
これにより、
ワークフローは次のようになります.