Emacs Ruby 자동 완성 거의 작동


132

코드를 입력하는 동안 자동 완성 드롭 다운 상자가 표시되도록 Rsense를 사용하여 emacs 구성을 업데이트했습니다. 루비 온 레일즈 프로젝트에서 일부 코드를 편집 할 때 테이블에서 답변을 선택할 수 없다는 것을 제외하고는 대부분의 파일에서 잘 작동합니다.

여기 내 설정입니다 : https://github.com/map7/simple_emacs

우분투 10.04에서 이것을 사용하고 있습니다.

간단한 루비 스크립트 파일의 경우 훌륭하게 작동합니다. 새 파일과 형식을 열 수 있습니다.

"test".up...

옵션 목록에 'p'문자를 입력하는 것처럼 화살표 키로 목록을 위아래로 이동하고 Enter 키로 하나 (예 : 대문자)를 선택할 수 있습니다.

작동하지 않는 것은 정확히 동일한 테스트를 수행하지만 rails 프로젝트의 기본 디렉토리 내에있을 때입니다.

최신 정보:

문제는 (레일 필요) 문제이므로 emacs-rails 플러그인에는 자동 완성 기능이 마음에 들지 않는 것이 있습니다.

최신 정보:

emacs-rails-> rails-project.el에 있습니다. 이 매크로를 주석 처리하면 자동 완성이 작동하지만 그렇지 않으면 다음과 같이 작동하지 않습니다.

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

누군가 이것이 이것이 자동 완성을 깨는 이유를 설명 할 수 있습니까?


1
자동 완성 기능은 루비, C ++, lisp 및 모든 것에 사용됩니다
map7

1
여기서 매크로가 사용 된 곳은 어디입니까?
milkypostman

1
나는 주로 rails 매크로를 사용하여 MVC의 다른 파일 간을 이동하고 DB / server / console / etc를 시작합니다.
map7

1
답을 찾기 위해 솔루션을 추출하여 "작동"티켓을 줄 수 있습니까?
przemo_li

2
przemo_li, 이것에 대한 답변이 있지만 rails.el 플러그인이 설치되어 있고 rails minor 모드 소스 코드 파일 내에서 자동 완성을 시도하면 자동 완성이 여전히 작동하지 않습니다.
map7

답변:


7

생각은 다음과 같습니다. 매크로는 flet함수를 (rails-project:root)한 번만 실행 (rails-project:root)직전 의 값에 바인딩합니다 body. (성능 향상을 주장하는 방법은 다음과 같습니다. 외부 (rails-project:root)는 고가이므로 한 번만 호출하고 값을 캐싱하는 것이 좋습니다.)

불행히도 내부에 body의도적으로 (rails-project:root)반환 값을 변경하는 부작용이있는 코드 가 있으면 아무런 영향을 미치지 않습니다. bodyEmacs lisp는 동적으로 flet이름을 바인딩하기 때문에이 변경은 내부에서 호출 된 다른 코드에서도 보이지 않습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.