Soru Emacs Yakut otomatik tamamlama neredeyse çalışıyor


Kod yazarken bir otomatik tamamlama açılır kutusunun görüntülenmesine izin vermek için Rsense kullanımıyla emacs yapılandırmamı güncelledim. Bu, çoğu dosyada iyi çalışır, ancak raylar projesinde rubyomda bir kod düzenlediğimde tablodan bir cevap seçmeme izin vermediğimi fark ettim.

İşte benim kurulumum: https://github.com/map7/simple_emacs

Bunu Ubuntu 10.04 altında kullanıyorum.

Basit ruby ​​script dosyaları için harika çalışıyor. Yeni bir dosya açabilir ve yazabilirim.

"test".up...

Bende 'p' karakterini yazarken seçenekler listesi belirir ve ok tuşları ile listeyi yukarı ve aşağı kaydırabilir ve enter tuşu ile bir tane (örneğin: upcase) seçebilirim.

Ne işe yaramazsa aynı testi yaptığım zaman, ancak bir rails projesinin temel dizini.

Güncelleştirme:

Sorunun (raylar gerektirir) ile ilgili olduğunu bulduk, bu yüzden otomatik tamamlamanın sevmediği emacs-ray eklentisinde bir şey var.

Güncelleştirme: 

Emacs rayları içinde -> raylar-project.el. Bu makroyu açıklarsam otomatik tamamlama çalışır, aksi halde olmaz:

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

Birisi bunun neden kırıldığını otomatik olarak açıklayabilir mi?


131
2017-11-03 00:44


Menşei


nerede kullanılır - milkypostman
Otomatik tamamlama işlevi yakut, C ++, lisp ve her şeyde kullanılır - map7
Buradaki makronun nerede kullanıldığı kastediyordum? - milkypostman
Esas olarak MVC'deki farklı dosyalar arasında geçiş yapmak için DB makrosunu kullanıyorum ve DB / server / console / etc programını başlatıyorum. - map7
przemo_li, bunun bir cevabı vardı, ancak rails.el eklentisi yüklendiğinde otomatik tamamlama hala çalışmıyor ve bir ray küçük modda kaynak kodu dosyası içinde otomatik tamamlamaya çalışıyorsunuz. - map7


Cevaplar:


İşte bir düşünce: Makro bir bağlama flet fonksiyon (rails-project:root) değere bir kez (rails-project:root) hemen önce var body çalıştırır. (Bu bir performans artışı iddia ediyor: Görünüşte dış (rails-project:root) pahalıdır, bu yüzden bir kez çağırmak ve değeri önbelleğe almak iyi bir fikir gibi görünür.)

Ne yazık ki, içinde kod varsa body Bu, bir yan etkinin, değeri (rails-project:root) döner, hiçbir etkisi olmaz. Bu değişiklik, içinde denilen diğer kodlarda bile görünmez olacaktır. body çünkü Emacs lisp dinamik bağlanır flet isimler.


6
2018-06-19 05:23