为什么Emacs项目C-c p未定义?

时间:2015-07-15 03:41:39

标签: emacs projectile

我是Emacs的新手。我安装了Projectile。

当我C-c p时,它说:

C-c p is undefined

想知道出了什么问题?

以下是我的~/.emacs文件。

(require 'package)

(add-to-list 'package-archives
                      '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

(defvar required-packages
  '(
    projectile
    ) "a list of packages to ensure are installed at launch.")

(require 'cl)

                    ; method to check if all packages are installed
(defun packages-installed-p ()
  (loop for p in required-packages
    when (not (package-installed-p p)) do (return nil)
    finally (return t)))

                    ; if not all packages are installed, check one by one and install the missing ones.
(unless (packages-installed-p)
                    ; check for new packages (package versions)
  (message "%s" "Emacs is now refreshing its package database...")
  (package-refresh-contents)
  (message "%s" " done.")
                    ; install the missing packages
  (dolist (p required-packages)
    (when (not (package-installed-p p))
      (package-install p))))

(require 'projectile)
(projectile-global-mode)

修改

我的.projectile文件

-/venv
-*.pyc
-*.pyc~
-.git
-.gitignore
-.DS_Store

修改2

C-h v的{​​p> projectile-keymap-prefix输出如下:

projectile-keymap-prefix is a variable defined in `projectile.el'.
Its value is "^Cp"

Documentation:
Projectile keymap prefix.

You can customize this variable

编辑3

我使用的是OS X 10.10.4。我从命令行$emacs启动emacs。我使用以下命令安装了Emacs:

brew install emacs --with-cocoa 

并且,第一次(当我启动emacs时)。如果M-x,我不会project-switch-project,而是project-switch-to-buffer。切换缓冲区后,我可以切换项目。

3 个答案:

答案 0 :(得分:7)

您现在需要显式启用它并设置前缀。启用带有C-c C-p前缀的Projectile的步骤:

(projectile-mode +1)
(define-key projectile-mode-map (kbd "C-c C-p") 'projectile-command-map)

这在2018年发生了两次变化。鲍里斯曾经将C-c p设置为默认领导者,然后将其更改为C-c C-p以符合the emacs keybinding conventions的要求(第2点提到它。)。但是现在它已被完全删除,因此您应该自己进行设置。

答案 1 :(得分:1)

您需要在~/.emacs文件中手动激活射弹模式:

(projectile-mode 1)

答案 2 :(得分:0)

我最近遇到了一个类似的问题,就是在将projectile-global-mode包固​​定到 melpa stable 归档文件后,projectile无法正常工作v0.14.0版本。

projectile-global-mode以前的行为方式是:打开键绑定后,可以从任何缓冲区中使用它们,但是现在在emacs之后在启动屏幕(处于基本模式下)时,我无法使其工作就像Menno Smits在评论中指出的那样。

出于好奇,我git bisect进行了射弹的源代码历史分析,以找出哪个提交引入了此行为更改,并最终得到this,后者不再使用define-globalized-minor-mode进行定义全局次要模式,但默认情况下使用projectile-mode(define-minor-mode xxxxxx :global t)定义为全局,我认为可以从define-globalized-minor-mode的文档中看出差异:

  

全局启用该模式还会影响随后通过访问文件而创建的缓冲区,以及使用基本模式以外的主要模式的缓冲区;但它不会在基本模式下检测到新缓冲区的创建。 Source

不确定是否与此有关,但这就是我想出的办法,希望它能帮助与我一样困惑的任何人。