jpalardy / vim-slime

A vim plugin to give you some slime. (Emacs)
http://technotales.wordpress.com/2007/10/03/like-slime-for-vim/
MIT License
1.83k stars 223 forks source link

Additional 'return' required when sending indented, commented code to ipython #418

Open xxyxxyxyx1 opened 4 months ago

xxyxxyxyx1 commented 4 months ago

I am using kitty+neovim+ipython. When I SlimeParagraphSend to ipython, in most cases, the paragraph runs immediately in ipython. However, if the paragraph ends in an indented line followed by a comment, it does not work and I must manually press 'return' in the ipython interpreter.

Here are some examples to explain the problem. They are equivalent when the indented code is a def(), a for, etc.

# test that works
def test():
    print('test')
# test that doesn't work, I must press 'return' in the ipython interpreter to get the code to run
def test():
    print('test')
# this terminal comment line breaks it

After sending the above paragraph, the ipython interpreter looks like this until I press 'return':

In [1]: # test that doesn't work
   ...: def test():
   ...:     print('test')
   ...: 
   ...: #
   ...: 

Adding a pass (or any other non-comment, non-indented python line) between the indented line and the terminal comment prevents the problem:

# test that works 
def test():
    print('test')
pass 
# adding an extra non-indented, non-comment line prevents the problem

This is inconvenient for me because I use vim folds like #{{{ ... #}}} to organize files, so I often have a terminal #}}} after a function definition.

My relevant vimrc is:

let g:slime_bracketed_paste = 1
let g:slime_target = "kitty"
let g:slime_default_config = {"listen_on": $KITTY_LISTEN_ON}

Any idea where this problem comes from?

jpalardy commented 4 months ago

Hi @xxyxxyxyx1

Of all the REPLs out there, python is the one that caused the most problems. I would recommend trying different permutations until you can isolate the problem:

Let me know what you find and we can iterate.

xxyxxyxyx1 commented 4 months ago

Thank you for the suggestions. Switching from slime_bracketed_paste to slime_python_ipython seems to solve this problem.

slime_python_ipython is inferior in other ways:

For speed, it would be very nice to fix the bracketed paste mode, but this is a usable solution that doesn't require changing the python file itself.

jpalardy commented 4 months ago

In the case of python itself, what would it take to fix bracketed mode?