Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running Python interactively from within Sublime Text 2

I have looked at all the answers on this forum but I'm missing something. I want to be able to hit Cmd+B while editing a Python file "myfile.py" in Sublime Text 2.

This should open up a Python shell that loads my file and returns me to the interactive prompt so the namespace in my Python script is available.

Setting the -i option in the build setting still closes the interpreter (see below)

> 81
> >>>  [Finished in 0.1s]

I downloaded sublimeREPL but I'm not sure how to set the -i option.
Any help is appreciated

like image 931
yegodz Avatar asked Dec 29 '12 08:12

yegodz


People also ask

Can I run Python code in Sublime Text?

Yes, you can use Sublime Text 3 to run Python codes as it has basic built-in support. Sublime Text IDE is fast and will also allow you to customize your editor as per your needs in order to help you create a Python development environment.


2 Answers

ok, thanks to sneawo for the hints! Here's my first cut at doing this.

Step 1. Create a plugin pydev, (from Tools->New Plugin) which creates a command 'pydev'

import sublime, sublime_plugin

class PydevCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command('set_layout', {"cols":[0.0, 1.0], "rows":[0.0, 0.5, 1.0], "cells":[[0, 0, 1, 1], [0, 1, 1, 2]]})
        self.window.run_command('repl_open',{"type": "subprocess",
                                             "encoding": "utf8",
                                             "cmd": ["python2.7", "-i", "-u", "$file"],
                                             "cwd": "$file_path",
                                             "syntax": "Packages/Python/Python.tmLanguage",
                                             "external_id": "python2.7"
                                             })
        self.window.run_command('move_to_group', { "group": 1 }) 

Step 2. Create a new key binding in the Preferences->Key-Bindings-user

{"keys": ["f5"], "command": "pydev"}

Now pressing f5 (on the Mac it will be fn+f5 by default) does the trick-it will start the python interpreter in a repl tab, set the layout to two-window horizontal and move the repl tab to the lower window.

This is pretty basic in that it doesn't check to see what the current layout is and simply sets the layout to 2-horizontal. Will probably spruce up the code to do some checking and simply add a horizontal window to the existing layout. Also would be good to remove the horizontal buffer when the repl tab is closed.

like image 70
yegodz Avatar answered Sep 28 '22 06:09

yegodz


Try to update your user keybindings:

[
    { "keys": ["super+shift+r"], "command": "repl_open", 
                 "caption": "Python",
                 "mnemonic": "p",
                 "args": {
                    "type": "subprocess",
                    "encoding": "utf8",
                    "cmd": ["python", "-i", "-u", "$file"],
                    "cwd": "$file_path",
                    "syntax": "Packages/Python/Python.tmLanguage",
                    "external_id": "python"
                    } 
    }
]
like image 25
sneawo Avatar answered Sep 28 '22 06:09

sneawo