Làm thế nào để bạn chạy pry từ emacs


9

Trong khi viết mã RoR, tôi thường cần chạy thả vào một phiên pry hoặc trình gỡ lỗi. Vì vậy, tôi đặt binding.prydòng của tôi trong mã thực hiện và chạy (các) thông số kỹ thuật của tôi. Điều đó hoạt động tốt nếu tôi chạy các thông số kỹ thuật trong một thiết bị đầu cuối nhưng từ bên trong Emacs, tôi nhận được một đầu ra lộn xộn và rất khó để sử dụng trình gỡ lỗi / pry.

Các bạn làm thế nào?

nhập mô tả hình ảnh ở đây

Câu trả lời:


10

rspec-modegần đây đã thêm một phần trong README về chủ đề này. Nó nói rằng:

Cài đặt inf-rubyvà thêm phần này vào tệp init của bạn:

(add-hook 'after-init-hook 'inf-ruby-switch-setup)

Khi bạn đã đạt đến điểm dừng, hãy nhấn C-x C-qđể bật inf-ruby.


1
Điều đó không hoạt động nhưng thật không may, nó có những ký tự mã màu kỳ lạ như ^[[0G, ^[[1A. Tôi có thể thoát khỏi những cái đó không?
chalmagean

Để biết một trong các mã thoát, hãy xem hướng dẫn ở phía dưới: github.com/nonsequitour/inf-ruby#bugs . Nếu mã màu cũng gây ra sự cố (trên hệ thống của tôi thì chúng không xảy ra), hãy thêm Pry.config.color = falsetheo cách tương tự như cách khắc phục được đề xuất ở đó.
Dmitry

6

Tôi thấy rằng pry-remote là cách tốt nhất để chạy pry trong Emacs, kể từ đó pry có bộ đệm chuyên dụng của riêng nó và có thể gắn vào một quy trình ruby ​​từ bất cứ đâu (bao gồm cả thiết bị đầu cuối không phải Emacs hoặc những thứ như pow ). Tôi sử dụng một cái gì đó như thế này:

(defun my-run-remote-pry (&rest args)
  (interactive)
  (let ((buffer (apply 'make-comint "pry-remote" "pry-remote" nil args)))
    (switch-to-buffer buffer)
    (setq-local comint-process-echoes t)))

(define-key ruby-mode-map (kbd "C-c r d") 'my-run-remote-pry) ; (or whatever keybinding)

Sau đó, bạn sẽ nhập binding.remote_prymã của bạn; bạn gắn vào một sự chờ đợi pryvới C-c r d(hoặc bất cứ điều gì) và thoát pry (tiếp tục quá trình) với C-c C-d.

Bạn cũng có thể muốn vô hiệu hóa phân trang trong của mình ~/.pryrc, vì nó không chơi tốt với comint:

Pry.config.pager = false
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.