emacs-jediは異なるプロジェクトのファイルを編集しているときに検出し、対応するvirtualenvを利用できます。慣習で私のvirtualenvsは私のプロジェクトと同じ名前を持っています。それらは$HOME/.virtualenvs/
emacs-jediでプロジェクト固有のvirtualenvを使用するにはどうすればいいですか
私が見つけたkenobi.elにありますが、virtualenvsはプロジェクトルートのbinディレクトリにあります。それはまた私が必要としない他のいくつかの機能を持っています。
kenobi.elからインスピレーションを得て、私は次のようにjediを初期化しました。それはかなりうまくいくが、完璧ではない。
私のプロジェクトからライブラリA
をインポートした場合、A
はB
をインポートします。私はA
で定義された定義にジャンプすることができますが、そこには一度、B
から定義にジャンプすることはできません。
マイ初期化:
(defun project-directory (buffer-name)
(let ((git-dir (file-name-directory buffer-name)))
(while (and (not (file-exists-p (concat git-dir ".git")))
git-dir)
(setq git-dir
(if (equal git-dir "/")
nil
(file-name-directory (directory-file-name git-dir)))))
git-dir))
(defun project-name (buffer-name)
(let ((git-dir (project-directory buffer-name)))
(if git-dir
(file-name-nondirectory
(directory-file-name git-dir))
nil)))
(defun virtualenv-directory (buffer-name)
(let ((venv-dir (expand-file-name
(concat "~/.virtualenvs/" (project-name buffer-name)))))
(if (and venv-dir (file-exists-p venv-dir))
venv-dir
nil)))
(defun jedi-setup-args()
(let ((venv-dir (virtualenv-directory buffer-file-name)))
(when venv-dir
(set (make-local-variable 'jedi:server-args) (list "--virtual-env" venv-dir)))))
(setq jedi:setup-keys t)
(setq jedi:complete-on-dot t)
(add-hook 'python-mode-hook 'jedi-setup-args)
(add-hook 'python-mode-hook 'jedi:setup)
私はジェダイを初期化する方法が間違っていますか?
を別の素敵なパッケージauto-virtualenvwrapperがあります:https://github.com/robert-zaremba/auto-virtualenvwrapper.el。私はあなたがそれを試みると思います。 – pingz