Подтвердить что ты не робот

Запуск Python в интерактивном режиме изнутри Sublime Text 2

Я просмотрел все ответы на этом форуме, но мне что-то не хватает. Я хочу иметь возможность ударить Cmd + B при редактировании файла Python "myfile.py" в Sublime Text 2.

Это должно открыть оболочку Python, которая загружает мой файл и возвращает меня в интерактивное приглашение, поэтому доступно пространство имен в моем Python script.

Установка параметра -i в настройке сборки по-прежнему закрывает интерпретатор (см. ниже)

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

Я загрузил sublimeREPL, но я не уверен, как установить параметр -i.
Любая помощь приветствуется

4b9b3361

Ответ 1

ok, благодаря sneawo для подсказок! Здесь мой первый разрез при этом.

Шаг 1. Создайте плагин pydev (из Tools- > New Plugin), который создает команду '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 }) 

Шаг 2. Создайте новую привязку клавиш в Preferences- > Key-Bindings-user

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

Теперь нажатие f5 (на Mac это будет fn + f5 по умолчанию) делает трюк - он запустит интерпретатор python на вкладке repl, установите макет в горизонтальное положение на два окна и переместите вкладку repl в нижнем окне.

Это довольно просто, поскольку он не проверяет, что такое текущий макет, и просто устанавливает макет в 2-горизонтальный. Скорее всего, это поможет сделать некоторые проверки и просто добавить горизонтальное окно к существующему макету. Также было бы полезно удалить горизонтальный буфер, когда вкладка repl закрыта.

Ответ 2

Попробуйте обновить ключевые слова пользователя:

[
    { "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"
                    } 
    }
]

Ответ 3

Ответ намного проще, чем ваш подход. Просто определите новый "профиль" сборки (Build system), в нем вы точно фиксируете сборку по умолчанию Python, за исключением изменения опции -u до -ui

{ "cmd": ["C:\\python33\\python.exe", "-ui", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python" }

Ответ 4

Я хотел добавить быстрое изменение к ответу @user1936097.

Я скопировал эту идею, но хотел вместо этого загрузить IPython (код как работает отлично для загрузки стандартного Python). Я заменил...

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('repl_open', {
                    "type": "subprocess",
                    "encoding": "utf8",
                    "autocomplete_server": true,
                    "cmd": ["python","-u","${packages}/SublimeREPL/config/Python/ipy_repl.py"],
                    "cwd": "$file_path",
                    "syntax": "Packages/Python/Python.tmLanguage",
                    "external_id": "python",
                    "extend_env": {
                        "PYTHONIOENCODING": "utf-8",
                        "SUBLIMEREPL_EDITOR": "$editor"}
                    })

Но это не сработало.

Линия "autocomplete_server": true оказалась проблемой. Если я удалю его, код запустится, но IPython открыл закрытие. Если я его оставил, ничего не произошло.

Наконец я заимствовал команду, найденную в файле /SublimeREPL/config/Python/Default.sublime-commands, и придумал...

self.window.run_command('run_existing_window_command', {
                        "id": "repl_python_ipython",
                        "file": "config/Python/Main.sublime-menu"
                    })

Это сделало окончательный код плагина:

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('run_existing_window_command', {
                        "id": "repl_python_ipython",
                        "file": "config/Python/Main.sublime-menu"
                    })
        self.window.run_command('move_to_group', { "group": 1 })

Назначьте это ключу, как показано в исходном сообщении, и теперь вы будете загружать IPython вместо стандартного Python!

Ответ 5

Вот простой способ создания новой системы сборки.

{
    "cmd": ["C:\\python33\\python.exe", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}

Затем сохраните систему сборки как Python3 или Python27 и выберите ее по умолчанию.