14

I love to use bpython but in Ruby there is a gem called interactive_editor that makes it possible to combine Vi(m) with the Ruby shell which makes the Development process much more comfortable. A good introduction to interactive_editor: http://vimcasts.org/episodes/running-vim-within-irb/

Are there any tools (like interactive_editor for Ruby) available to combine the Python shell with Vi(m)?

StandardNerd
  • 4,093
  • 9
  • 46
  • 77
  • err, Pry has the features of `interactive_editor` built-in already, you realize this right? [see here](https://github.com/pry/pry/wiki/Editor-integration) – horseyguy Apr 23 '12 at 21:54
  • A pragmatic solution might be to follow the advice given here - http://stackoverflow.com/questions/6636124/how-do-i-make-vi-editing-mode-work-in-irb-when-using-rvm This is if you just want the python interpreter key bindings to be consistent with VI – arcseldon Nov 24 '15 at 00:07

2 Answers2

14

You could have a look at the vim-ipython vim plugin:

https://github.com/ivanov/vim-ipython

This requires you to install the ipython shell (but I recommend doing this anyway as it adds a lot of functionality to the standard python shell).

If you don't want to install ipython, I suggest having a look at the ConqueShell plugin for vim:

http://www.vim.org/scripts/script.php?script_id=2771

This lets you run shells within vim. Once you've sourced the vim-ball, all you need to do is

:ConqueTerm python

to get a python shell directly in vim.

Pascal Bugnion
  • 4,878
  • 1
  • 24
  • 29
1

I couldn't get vim-ipython to work, so I made this .vimrc solution that works with ConqueShell:

imap <silent> <leader>m <Esc>Vy<C-w><C-w>p
nmap <silent> <leader>m Vy<C-w><C-w>p
vmap <silent> <leader>m y<C-w><C-w>p
imap <silent> <leader>n <Esc><C-w><S-w>']0j
nmap <silent> <leader>n <C-w><S-w>']0j

From a new Vim screen and ConqueShell installed, type :ConqueTermSplit python. Now return to the original window (the shortcut is <C-w><S-w>) and type in some Python code.

To send the line under to cursor to the interpreter, press <leader>m. I have the leader mapped to comma, so that's a pretty simple motion. To send a block of code, highlight some lines in visual mode and do <leader>m. It works the same way.

To return to your script, <leader>n goes to the line immediately following what you just executed. As a side benefit, you can also use this command to move from window to window quickly.

EDIT (2-20-2015): If you're using ipython as the interpreter, you need to run %autoindent to turn off auto-indenting to preserve formatting for some code blocks. Cheers!

rsoren
  • 4,036
  • 3
  • 26
  • 37