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メソッドに変更されました.
    
    " 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
    

    これにより、を押すとデフォルトで現在のローがConqueTermに実行されます.
    ワークフローは次のようになります.
  • vim編集pythonファイル
  • を開く
  • :ConqueTermSplit ipython pythonインタプリタを開く(または、tp)
  • コードを選択し、を押すと、ConqueTermで実行結果が直接表示されます.
  • ruby、groovyなどを編集するのも同じで、ipythonを対応する解釈器に変えるだけでいいです.