GNU Emacs'ta bir Python tek satırlık ifadeyi değerlendirin


1

Ben kullanıyorum run-pythononun "İnferior piton kabuk" için GNU Emacs 24.3 ve benzer davranışı elde etmek çalışıyorum lisp-send-last-sexpgönderir ve çalışan tercüman bir ifade değerlendirir. Bunu bir seferde sadece bir satır için yapmaya çalışıyorum.

Burada verilen çözümleri aşağıdaki işleve göre kısaltdım:

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

Yarım çalışıyor. Bu komutu birkaç satır aşağı doğru çalıştırdığımda, birkaç >>> isteminden oluşan bir dizgi alıyorum ve neden sadece bir satırın gönderilmesi gerektiğine karar veremiyorum. Ayrıca, bazen sonuç hemen gösterilmez ve komutu iki kez çalıştırmam gerekiyor. Örneğin:

9 + 9 #, komutu .py dosyasının 13. satırında çalıştırın,

======

# result in Python shell.

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

Yanıtlar:


3

YASAL UYARI : Aşağıdaki öz reklamdır ...

Bir tampon ile bir kod yorumlayıcısı arasındaki etkileşimi yönetmek için geliştirdim isend-mode.

İşte nasıl kullanacağınız:

  1. Bir terminalde bir python yorumlayıcısı çalıştırın:

    M-xansi-termRET/usr/bin/pythonRET

  2. Python kodunuzu içeren tampon belleğe geçin:

    C-xbmy-buffer.pyRET

  3. Terminalinle ilişkilendir:

    M-xisendRET*ansi-term*RET

  4. Tip C-RETtercüman mevcut tampon hattı göndermek için.

Avantajı isend-mode(benim açımdan, en azından) dil-agnostik olmasıdır. Python, shell ya da dilediğiniz herhangi bir dil ile aynı şekilde kullanabilirsiniz.


0

Tamam, python-shell işlevlerine göz attıktan sonra biraz daha çalışıyorum sorunumu çözen bir hack oluşturdum: bölgeyi gönderdikten sonra bir yazdırma komutu gönderin! Hangi nedenle olursa olsun, bu tüm >>> istemlerini bastırır.

(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()"))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.