16

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

当我这样做时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输出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。切换缓冲区后,我可以切换项目。

4

4 回答 4

12

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

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

这在 2018 年发生了几次变化。Boris 曾经设置C-c p为默认领导,然后将其更改为C-c C-p符合emacs 键绑定约定(第 2 条提到它。)。但是现在它已经完全删除了,所以你应该自己设置它。

于 2018-08-27T20:23:50.803 回答
1

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

(projectile-mode 1)
于 2017-08-25T10:05:31.707 回答
0

我最近遇到了一个类似的问题,projectile-global-mode在我将projectile包固定到melpa 稳定存档(版本为v0.14.0.

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

出于好奇,我git bisect在 projectile 的源代码历史中找出了哪个提交引入了这种行为变化并最终得到了 this,它不再用于define-globalized-minor-mode定义全局次要模式而是projectile-mode默认定义为全局 with (define-minor-mode xxxxxx :global t),区别可能是从define-globalized-minor-mode我认为的医生那里得知:

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

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

于 2018-07-15T04:45:58.940 回答
0

Projectile 的默认键盘映射前缀由变量定义projectile-keymap-prefix。您可以使用C-h v来查看该变量的值。如果未设置或未设置^Cp,您可以使用下面的代码将其设置为C-c p

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

或您喜欢的任何其他键绑定。

于 2015-07-15T04:48:39.740 回答