5

私はPymacsを使用して、ここで説明されているように、 .emacsファイルに次の行を含むropemacsropeをロードします。

(autoload 'pymacs-load "pymacs" nil t)
(pymacs-load "ropemacs" "rope-")

ただし、 Ropemacsのロードには時間がかかるため、Emacsの起動が大幅に遅くなります。

代わりに次の行を試しましたが、Pythonファイルを開くたびにRopemacsが読み込まれます。

(add-hook 'python-mode-hook (lambda () (pymacs-load "ropemacs" "rope-")))

pymacs-loadPythonファイルを開くときに操作を実行する方法はありますが、 ropemacsropeがまだロードされていない場合に限りますか?

4

3 に答える 3

9

私の.emacsには次のものがあります。

(autoload 'python-mode "my-python-setup" "" t)

そして、別のファイルmy-python-setup.elに保存します:

(require 'python)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
;; Initialize Pymacs
(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-exec "pymacs" nil t)
(autoload 'pymacs-load "pymacs" nil t)
;; Initialize Rope
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)

このように、Pymacsropmacsは一度だけロードされます。これは、最初の.pyファイルが開かれたときに発生します。

于 2010-06-01T20:28:18.160 に答える
2

これがeval-after-load目的です。

(eval-after-load "python-mode"
  '(progn
     ;; Do whatever you need to do here. It will only get executed
     ;; after python-mode.el has loaded.
     (require 'pymacs)
     (pymacs-load "ropemacs" "rope-")))

python-mode.elの代わりにpython.elを使用する場合は、「python-mode」ではなく「python」と書く必要があります。

私は実際に、対話的に呼び出すことができる別の関数にコードをロードするropemacsを持っています。これは、ropemacsが時々クラッシュするためです。

于 2010-09-19T13:28:39.287 に答える
1

This is my solution:

(defun my-python-hook-mode ()
  (interactive)
  (require 'pymacs)
  (autoload 'pymacs-apply "pymacs")
  (autoload 'pymacs-call "pymacs")
  (autoload 'pymacs-eval "pymacs" nil t)
  (autoload 'pymacs-exec "pymacs" nil t)
  (autoload 'pymacs-load "pymacs" nil t)
  (ac-ropemacs-setup)
  (setq ropemacs-confirm-saving 'nil)
  (ropemacs-mode t)
  (define-key python-mode-map "\C-m" 'newline-and-indent)
 )
(add-hook 'python-mode-hook 'my-python-hook-mode)

where ac-ropemacs-setup is defined in the auto-complete module:

(defun ac-ropemacs-require ()
  (with-no-warnings
    (unless ac-ropemacs-loaded
      (pymacs-load "ropemacs" "rope-")
      (if (boundp 'ropemacs-enable-autoimport)
          (setq ropemacs-enable-autoimport t))
      (setq ac-ropemacs-loaded t))))

(defun ac-ropemacs-setup ()
  (ac-ropemacs-require)
  ;(setq ac-sources (append (list 'ac-source-ropemacs) ac-sources))
  (setq ac-omni-completion-sources '(("\\." ac-source-ropemacs))))

This solution assume that you use auto-complete at the same time.

于 2011-03-08T14:30:09.583 に答える