1

Я использую run-python в GNU Emacs 24.3 для его "Inferior python shell" и пытаюсь получить поведение, подобное lisp-send-last-sexp , которое отправляет и оценивает выражение в работающем интерпретаторе. Я пытаюсь сделать это только для одной строки за раз.

Я сократил приведенные здесь решения до следующей функции:

(add-hook 'python-mode-hook
          'my-python-send-statement)

(defun my-python-send-statement ()
  (interactive)
  (local-set-key [S-return] 'my-python-send-statement)
  (end-of-line)
  (set-mark (line-beginning-position))
  (call-interactively 'python-shell-send-region))

Это работает, на полпути. Когда я запускаю эту команду в несколько строк, я получаю строку из нескольких запросов >>>, и я не могу понять, почему, поскольку должна быть отправлена только одна строка. Кроме того, иногда результат не будет показан сразу, и мне придется выполнить команду дважды. Например:

9+9 # запустите команду в строке 13 .py файла,

======

# result in Python shell.

>>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> 18

2 ответа2

3

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: следующее является саморекламой ...

Для управления взаимодействием между буфером и интерпретатором кода я разработал isend-mode.

Вот как вы бы это использовали:

  1. Запустите интерпретатор Python в терминале:

    Mx и ansi-term RET /usr/bin/python RET

  2. Переключитесь на буфер, содержащий ваш код Python:

    Cx b my-buffer.py RET

  3. Свяжите это с вашим терминалом:

    Mx isend RET *ansi-term* RET

  4. Введите C-RET, чтобы отправить текущую строку буфера интерпретатору.

Преимущество isend-mode (по крайней мере, с моей точки зрения) в том, что он не зависит от языка. Вы можете использовать его таким же образом для python, shell или любого интерпретируемого языка, который вам нравится.

0

Хорошо, после просмотра функций оболочки python я собрал хак, который решает мою проблему: отправьте команду печати после отправки региона! По какой-то причине это подавляет все запросы >>>.

(add-hook 'python-mode-hook
          'my-python-send-statement)

(defun my-python-send-statement ()
  (interactive)
  (local-set-key [S-return] 'my-python-send-statement)
  (end-of-line)
  (set-mark (line-beginning-position))
  (call-interactively 'python-shell-send-region)
  (python-shell-send-string "; print()"))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .