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

为什么Emacs项目C-CP未定义?,emacs,projectile,emacs-projectile,Emacs,Projectile,Emacs Projectile,我是Emacs的新手。我已经安装了射弹 当我做C-cp时,它会说: 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

我是Emacs的新手。我已经安装了射弹

当我做
C-cp
时,它会说:

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)
编辑

我的.投射文件

-/venv
-*.pyc
-*.pyc~
-.git
-.gitignore
-.DS_Store
编辑2

C-h v
投射物键映射前缀的输出如下所示:

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

Documentation:
Projectile keymap prefix.

You can customize this variable
编辑3

我正在使用OSX10.10.4。我从命令行
$emacs
启动emacs。我使用以下命令安装了Emacs:

brew install emacs --with-cocoa 

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

投射物的默认键映射前缀由变量
投射物键映射前缀定义。您可以使用
C-hv
查看该变量的值。如果未设置或不是
^Cp
,您可以使用下面的代码将其设置为
C-Cp

(setq projectile-keymap-prefix (kbd "C-c p"))

或者任意键绑定。

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

(projectile-mode 1)

我最近遇到了一个类似的问题,
投射物全局模式
在我将
投射物
包固定到melpa稳定存档(版本为
v0.14.0
)后,它的工作方式与以前不同

以前,
投射全局模式
的行为方式是,当打开时,任何缓冲区都可以使用键绑定,但现在我无法让它在emacs启动后的初始屏幕(处于基本模式)中工作,就像Menno Smits在注释中指出的那样

出于好奇,我
git bisect
sparlode的源代码历史,以找出哪个提交引入了此行为更改并最终获得,它不再使用
define globalized minor mode
来定义全局minor mode,而是使用
(定义次要模式xxxxxx:global t)
,从
定义全球化次要模式的文档中可以看出差异,我认为:

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


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

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

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

这在2018年发生了几次变化。Boris曾将
C-C-p
设置为默认的领导者,然后将其更改为
C-C-p
,以符合(项目符号2提到了它。)但是现在它被完全删除了,所以你应该自己设置它。

你有
.sparlet
文件吗?如果你不在项目中,我的理解是这可能不起作用。我还应该指出,你的
.init
代码在安装
sparlet
和将命令发送到fu方面对我很有效nction.尝试重新启动emacs,也许吧。嗨,我确实在Directory中有.sproject文件。我在基本模式下看到了划痕缓冲区的相同行为。如果我尝试在初始划痕缓冲区中使用C-C p,它不起作用,但在编辑其他文件时会起作用。是否在emacs启动时您正在初始划痕缓冲区中尝试C-C p?O显然,如果C-Cp也能在scratch缓冲区中工作,那将是一件好事,但这并不是什么大问题。你好,Tinker,似乎已经为
SprojectKeyMap prefix
设置了
^Cp
变量。我在上面的问题中添加了edit2。哦,这很奇怪。让我看看。你能先执行
Sprojection find file命令吗
查看它是否工作。然后使用
C-h f
查看绑定键。作为我的计算机,它是
C-C p f
。因此我可以使用它来执行投射命令。一切都很好,但您仍然有问题,那么我对此一无所知。
投射查找文件
按预期工作。
C-h f
也可以工作。但是C-C p f
不起作用。这很奇怪。也许你可以
在错误上切换调试
,看看内部发生了什么。对此我不太熟悉。很抱歉,我无法提供更多帮助。你引用的键绑定约定的链接似乎没有说
C-C-p
C-C-p
有任何不同,所以我很抱歉只是想知道,使用
C-C p
感觉也一样好。它似乎没有打破任何惯例。@DanielDinnyes,
C-C
对于任何大写或小写字母都是为最终用户保留的(如手册链接页上所述,这是要点2)。任何库绑定这样的序列都是一个缺陷。