Emacs Ruby tự động hoàn thành gần như làm việc


132

Tôi đã cập nhật cấu hình emacs của mình với việc sử dụng Rupense để cho phép hộp thả xuống tự động hoàn thành xuất hiện trong khi nhập mã. Điều này hoạt động tốt trong hầu hết các tệp trừ tôi thấy nó không cho phép tôi chọn câu trả lời từ bảng khi tôi chỉnh sửa một số mã trong dự án ruby ​​on rails của tôi.

Đây là thiết lập của tôi: https://github.com/map7/simple_emacs

Tôi đang sử dụng cái này trong Ubuntu 10.04.

Đối với các tập tin ruby ​​đơn giản, nó hoạt động rất tốt. Tôi có thể mở một tập tin mới và gõ.

"test".up...

Ngay khi tôi nhập ký tự 'p' vào danh sách các tùy chọn xuất hiện và tôi có thể đi lên và xuống danh sách bằng các phím mũi tên và chọn một (ví dụ: chữ hoa) bằng phím enter.

Điều không hiệu quả là khi tôi thực hiện cùng một bài kiểm tra nhưng trong thư mục cơ sở của dự án rails.

Cập nhật:

Nhận thấy rằng sự cố xảy ra với (yêu cầu 'đường ray), vì vậy đó là một cái gì đó trong plugin emacs-rails mà trình tự động hoàn thành không thích.

Cập nhật:

Nó nằm trong emacs-rails -> rails-project.el. Nếu tôi nhận xét macro này thì tự động hoàn tất sẽ hoạt động, nếu không thì nó không:

(defmacro* rails-project:with-root ((root) &body body)
  "If you use `rails-project:root' or functions related on it
several times in a block of code, you can optimize your code by
using this macro. Also, blocks of code will be executed only if
rails-root exist.
 (rails-project:with-root (root)
    (foo root)
    (bar (rails-core:file \"some/path\")))
 "
 `(let ((,root (rails-project:root)))
    (when ,root
      (flet ((rails-project:root () ,root))
        ,@body))))

Ai đó có thể giải thích tại sao điều này phá vỡ tự động hoàn thành?


1
Hàm tự động hoàn thành được sử dụng trong ruby, C ++, lisp và mọi thứ
map7

1
ý tôi là, macro ở đây được sử dụng ở đâu?
milkypostman 17/03/2016

1
Tôi chủ yếu sử dụng macro rails để chuyển giữa các tệp khác nhau trong MVC và khởi động DB / server / console / etc.
đồ7

1
Bạn có thể trích xuất giải pháp của mình để trả lời, và cho nó vé "hoạt động" không?
przemo_li

2
przemo_li, tôi sẽ làm gì nếu tôi có câu trả lời cho vấn đề này nhưng tính năng tự động hoàn thành vẫn không hoạt động khi bạn đã cài đặt plugin rails.el và bạn đang cố gắng tự động hoàn tất trong tệp mã nguồn chế độ nhỏ.
map7

Câu trả lời:


7

Đây là một suy nghĩ: Macro liên kết một flethàm (rails-project:root)một lần với giá trị đó(rails-project:root) ngay trước khi bodythực thi. (Đó là cách nó tuyên bố tăng hiệu suất: Rõ ràng bên ngoài (rails-project:root)là đắt tiền, vì vậy gọi một lần và lưu trữ giá trị có vẻ như là một ý tưởng tốt.)

Thật không may, nếu có mã bên trong bodycó tác dụng phụ có nghĩa là cố ý thay đổi giá trị (rails-project:root)trả về, nó sẽ không có hiệu lực. Sự thay đổi đó sẽ vô hình ngay cả với các mã khác được gọi trong bodyvì lac Emacs có ràng buộc động của các flettên.

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.