2012-12-29 8 views
14

Przyjrzałem się wszystkim odpowiedziom na tym forum, ale brakuje mi czegoś. Chcę być w stanie trafić Cmd + B podczas edycji plików Pythona „myfile.py” w Sublime Text 2.Uruchamianie Pythona interaktywnie z poziomu Sublime Text 2

To powinno otworzyć powłokę Pythona, który ładuje mój plik i zwraca się do mnie interaktywny monit, więc przestrzeń nazw w moim skrypcie Pythona jest dostępna.

Ustawianie opcji w ustawieniach kompilacji -i nadal zamyka tłumacza (patrz niżej)

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

Pobrałem sublimeREPL, ale nie jestem pewien jak ustawić opcję -i.
Każda pomoc jest mile widziana

Odpowiedz

7

Spróbuj zaktualizować skróty klawiszowe użytkowników:

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

Dzięki! to jest dokładnie to, czego potrzebowałem !! Czy można otworzyć terminal replikacji jako podzielone okno w poziomie lub jako okno zewnętrzne? – user1936097

+0

Myślę, że to jest możliwe z makro http://stackoverflow.com/questions/9646552/is-it-possible-to-chain-key-binding-commands-in-sublime-text-2 – sneawo

+0

Czy to nie ma większego sensu jako reguła budowania? – dbn

11

ok, dzięki sneawo za podpowiedzi! Oto moja pierwsza rada w tej sprawie.

Krok 1. Utwórz PyDev plugin (z Narzędzia-> Nowy Plugin), który tworzy polecenia '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 }) 

Krok 2. Tworzenie wiązania w Preferencje-> Key-Wiązania nowy klucz -user

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

teraz naciskając f5 (na komputerze Mac będzie fn + f5 domyślnie) uruchamia interpreter python w zakładce repl, ustawia układ na dwa okna w poziomie i przesuwa kartę repl do dolnego okna.

Jest to dość proste, ponieważ nie sprawdza, jaki jest obecny układ i po prostu ustawia układ na 2-poziomy. Najprawdopodobniej przygotuje kod do sprawdzenia i po prostu doda horyzontalne okno do istniejącego układu. Dobrze byłoby również usunąć bufor poziomy, gdy klapka repl jest zamknięta.

+1

to nie działa w systemie Windows, błąd "system nie może znaleźć określonego pliku". Czy możesz dać napiwek, co należy zmienić? – minerals

+0

Uwaga: może to zepsuć się podczas próby uzyskania dostępu do słowników. Dodanie '" extend_env ": {" PYTHONIOENCODING ":" utf-8 "}' do argumentów polecenia rozwiązuje ten problem. –

+0

Zastanawiam się, czy jest to możliwe, jak w 'REPL: R', aby wysłać rzeczy ze skryptu do już istniejącej konsoli REPL. –

-1

Oto prosty sposób na stworzenie nowego systemu kompilacji.

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

Następnie zapisz system kompilacji jako Python3 lub Python27 i wybierz go jako domyślny.

+0

Wygląda to dokładnie tak, jak domyślna reguła budowania. Czy uważasz, że robi to coś innego niż domyślna reguła budowania? – dbn

0

Odpowiedź jest o wiele prostsza niż Twoje podejście. Wystarczy zdefiniować nowy build "Profil" (system zbudować), w nim Państwo uchwycić dokładnie domyślny Python build, za wyjątkiem zamiany opcji -u do -ui

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

0

chciałem dodać krótki edit do odpowiedzi przez @ user1936097.

Skopiowałem pomysł, ale chciałem załadować IPython (kod działa poprawnie, aby załadować standardowy Python). Wymieniłem ...

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" 
              }) 

z ...

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"} 
        }) 

Ale to nie działa.

Wydaje się, że przyczyną problemu była linia "autocomplete_server": true. Jeśli go usunąłem, kod został uruchomiony, ale IPython otworzył zamknięte. Jeśli go zostawiłem, nic się nie stało.

końcu pożyczyłem polecenia w pliku /SublimeREPL/config/Python/Default.sublime-commands i wymyślił ...

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

To sprawiło, że ostateczny kod wtyczki:

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 }) 

przypisać ten do keybind jak pokazano na oryginalny post, a teraz załadujesz IPython zamiast standardowego Pythona!