Search code examples
pythonvimtmuxslime

PyShell and IPython are showing an extra indentation that is not there


I just started using tmux along with slime, PyShell and IPython and I have ran into the following problem.

I am trying to run the following code:

names = ['a', 'b', 'c']
nc = { name : 0 for name in names}
count = 1
for name in names:
    nc[name] += count
    count += 1
print(nc)

and when I normally run the file in terminal using python3 file.py, it correctly returns {'a': 1, 'b': 2, 'c': 3}.

However, when running this with slime, it is saying that there is an unexpected indent and the error message is showing that the following is being inputted:

names = ['a', 'b', 'c']
nc = { name : 0 for name in names}
count = 1
for name in names:
    nc[name] += count
        count += 1
print

However, this is not what I am inputting. Here is a screen shot to show this. Where is the problem coming from?


Solution

  • The error is caused by IPython inserting an indent automatically. To turn off automatic indent, use %autoindent command in IPython. To keep the option off when you restart IPython, add the line

    c.TerminalInteractiveShell.autoindent=False
    

    to your ipython_config.py which is located in a profile_profilename folder under the ~/.ipython directory on Linux. The default config would be located at ~/.ipython/profile_default/ipython_config.py. If you don't already have a config file, run

    ipython profile create default
    

    to create a default profile or name it something else by replacing default in above command with the desired profile name.