2015-02-03 29 views
5

Byłoby wspaniale mieć skrót klawiaturowy w notatniku IPython, który pozwoliłby edytować zawartość bieżącej komórki w zewnętrznym edytorze (np. Gvim). Może po prostu skopiuj zawartość bieżącej komórki do pliku tymczasowego, uruchom gvim na niej i aktualizuj bieżącą komórkę za każdym razem, gdy plik zostanie zapisany (i usuń plik tymczasowy po wyjściu z gvim). Może również zaktualizować plik tymczasowy, jeśli komórka jest edytowana z przeglądarki, tak aby gvim wiedział, że plik się zmienił.Edycja komórki IPython w zewnętrznym edytorze

Jestem świadomy projektów takich jak vim-ipython i ipython-vimception, ale nie odpowiadają moim potrzebom. Myślę, że przeglądarka wystarcza do prostych rzeczy, ale kiedy wymagana jest mocniejsza edycja, nie ma potrzeby wymyślać koła.

Czy wiesz, że taka funkcja istnieje już w notatniku IPython?

Dzięki.

Odpowiedz

9

Oto, co wymyśliłem. Dodałem 2 skróty:

  • "g", aby uruchomić gvima z zawartością bieżącej komórki (możesz zastąpić gvima dowolnym edytorem tekstu, który ci się podoba).
  • "u", aby zaktualizować zawartość bieżącej komórki o to, co zostało zapisane przez gvim.

Jeśli chcesz edytować komórkę za pomocą preferowanego edytora, naciśnij "g", wprowadź zmiany w komórce, zapisz plik w edytorze (i zakończ), a następnie naciśnij "u" .

Wystarczy wykonać tę komórkę, aby włączyć te funkcje:

%%javascript 

IPython.keyboard_manager.command_shortcuts.add_shortcut('g', { 
    handler : function (event) { 
     var input = IPython.notebook.get_selected_cell().get_text(); 
     var cmd = "f = open('.toto.py', 'w');f.close()"; 
     if (input != "") { 
      cmd = '%%writefile .toto.py\n' + input; 
     } 
     IPython.notebook.kernel.execute(cmd); 
     cmd = "import os;os.system('gvim .toto.py')"; 
     IPython.notebook.kernel.execute(cmd); 
     return false; 
    }} 
); 

IPython.keyboard_manager.command_shortcuts.add_shortcut('u', { 
    handler : function (event) { 
     function handle_output(msg) { 
      var ret = msg.content.text; 
      IPython.notebook.get_selected_cell().set_text(ret); 
     } 
     var callback = {'output': handle_output}; 
     var cmd = "f = open('.toto.py', 'r');print(f.read())"; 
     IPython.notebook.kernel.execute(cmd, {iopub: callback}, {silent: false}); 
     return false; 
    }} 
); 
+0

ta nie działa dla Sublime Text dla mnie. Zmieniłem cmd = "import os; os.system (" gvim .toto.py ")"; do cmd = "import os; os.system ('subs .toto.py')"; i Wysublimowany tekst są otwierane, ale nie czyta się .toto.py. – pheon

+0

eh nie uruchomiłem emacsa Windows, ale właśnie zrobiłem emacs automatycznie przeładowuję tymczasowy plik "toto". (część aktualizacji działa) HAPPY! –