我希望 emacs-jedi 检测我何时在不同项目中编辑文件,并使用相应的 virtualenv(如果可用)。按照惯例,我的 virtualenvs 与我的项目具有相同的名称。它们位于$HOME/.virtualenvs/
我找到了 kenobi.el,但它假设 virtualenvs 位于项目根目录的 bin 目录中。它还有一些我根本不需要的其他功能。
在 kenobi.el 的启发下,我为绝地编写了以下初始化。它工作得很好,但并不完美。
如果我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)
我如何初始化绝地有什么问题?