我是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
。切换缓冲区后,我可以切换项目。
答案 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
不确定是否与此有关,但这就是我想出的办法,希望它能帮助与我一样困惑的任何人。