REPL,即read-eval-print loop,最早出现在Lisp中,Emacs的
Slime模式编写lisp非常方便。在Slime中流程是这样:
- 编写小段代码
- <C-c><C-c>运行小代码
- 查看結果,继续编写小段代码
整个过程不用在编辑器和解释器之间来回切换。在vim下也是可以做到这样,虽然可能实现并不怎么完美。
ConqueTerm可以在vim在模拟Terminal,运行:ConqueTermSplit ipython就可以分割一个窗口并在其中执行ipython解释器。在另一个窗口中选中一段python代码,按<F9>就可以执行选中代码,这已经很接近于Emacs的Slime,但有几个缺点:
- 对python代码不能自动执行,需要手动再按一个回车,因为ConqueTerm会将选中代码的多余回车给删掉。
- 执行之后,自动选中了ConqueTerm窗口,我们希望光标仍然在代码窗口。
对于第一个问题,似乎只能通过修改ConqueTerm插件源代码来解决,只需要注释掉autoload/conque_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\n]*', '', '')
"let @@ = substitute(@@, '[\r\n]*$', '', '')
" 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 "}}}
对于第二个问题,则可以定义键映射来完成,在.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
这样按<C-c><C-c>将默认将当前行给ConqueTerm执行。
现在大致工作流程是这样:
- 打开vim编辑python文件
- :ConqueTermSplit ipython打开python解释器(或者用,tp)
- 选中代码,按<C-c><C-c>就可以直接在ConqueTerm中看到执行結果了。
编辑ruby,groovy等也是一样的,只需要将ipython换成相应解释器就行了。
分享到:
相关推荐
本文的最后介绍了winmanager插件,使用这个插件,可以把netrw插件、bufexplorer插件和taglist插件整合起来,使vim看起来更像一个集成开发环境(IDE)。 vim使用进阶: lookupfile插件 如果你在开发一个大的项目,当你...
因此,我编写此插件是为了提供更好的repl环境,以便在vim中编码python或其他文件。 它使用vim8的终端功能。 因此,您的vim版本必须不少于8.0,并且支持termianl函数才能使用此插件。如果您想阅读中文文档,请移步:...
壁炉Fireplace中有一个REPL,但如果我没有告诉过您,您可能不会注意到。 这是firewall.vim的方法。 顺便说一句,此插件用于Clojure。安装首先,设置 。 (如果您跳过此步骤,则只有一部分功能可用。) 使用您喜欢的...
vim使用手册:基础篇、插件篇等
vim-smartinput:Vim插件:提供智能输入助手
vim常用插件: 1. omnicppcomplete-0.41.zip 2. taglist_46_vim.zip 3. vim-autocomplpop.zip
vim-arpeggio:Vim插件:同时按下的按键的映射
vim-shfmt:shfmt的Vim插件(https:github.commvdansh)
病毒者vim-venter是一个vim插件垂直将当前窗口水平居中 在大型显示器上处理一个文件时,这主要有用与类似,但保留功能(状态栏,制表符等)安装vim插件将Plug 'jmckiern/vim-venter'添加到.vimrc 然后在vim中运行:...
vim-fakeclip:Vim插件:提供伪“剪贴板”寄存器
vim-replant:与Clojure REPL一起使用的一袋食品
vim-startuptime::timer_clock_selector:一个Vim插件,用于分析Vim的启动时间
gotests-vim:https :: github.comcweillgotests的Vim插件
REPL与Vim和Neovim上的:terminal很好地配合是一个Vim和Neovim插件,可以使编辑缓冲区很好地与REPL一起播放。 REPL在:terminal窗口中运行编辑缓冲区和REPL之间的交互从/向/向REPL发送编辑缓冲区的源使用REPL实时自动...
vim-agriculture::tractor:Vim插件可使用ag和rg之类的工具改善项目搜索
VIM快捷键 VIM快捷键 VIM插件 VIM快捷键 VIM插件
javacc的vim插件~~~~~ 十分好用哦
vim-win是用于管理Windows的Vim插件。 内置功能包括窗口选择,窗口缓冲区交换和窗口大小调整。 该插件是可扩展的,允许添加其他功能(请参见下面的配置)。 要求 完整功能vim>=8.1.2269或nvim>=0.4.0 功能受限(无...
vim配置插件
vim-arduino:Vim插件,用于编译和上传arduino草图