[已解决] 使用 Swiper 提示 cl-struct-define 函数定义为空?

安装了Swiper, Ivy 和 Counsel 包 在打开ivy mode处使用 (ivy-mode 1) 开启ivy模式 在windows系统下使用正常 但是在Ubuntu下使用出现error提示 Symbol’s function definition is void: cl-struct-define 大家有遇到过吗?

解决方法见四楼,将elpa目录删除重新,加载package就可以了

你要 require 一下 cl 这个扩展?

(require 'cl)

(require 'cl) 添加过了 完整的package代码如下:

(when (>= emacs-major-version 24)
  (require 'package)
  (package-initialize)
  (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
  )

(require 'cl)

(defvar wally/packages '(
			 company
			 monokai-theme
			 hungry-delete
			 swiper
			 counsel
			 window-numbering
			 ))

(defun wally/packages-installed-p ()
  (loop for pkg in wally/packages
	when (not (package-installed-p pkg)) do (return nil)
	finally (return t)))

(unless (wally/packages-installed-p)
  (message "%s" "Refreshing package database...")
  (package-refresh-contents)
  (dolist (pkg wally/packages)
    (when (not (package-installed-p pkg))
      (package-install pkg))))


;; Simple Packages Settings

;; Monokai Theme
(load-theme 'monokai 1)

;; Enable Hungry Delete
(require 'hungry-delete)
(global-hungry-delete-mode)

;; Enable Global Company Completion
(global-company-mode t)

;; Swiper Config
(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(global-set-key "\C-s" 'swiper)
(global-set-key (kbd "C-c C-r") 'ivy-resume)
(global-set-key (kbd "<f6>") 'ivy-resume)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "<f1> f") 'counsel-describe-function)
(global-set-key (kbd "<f1> v") 'counsel-describe-variable)

;; Window-Numbering Config
(require 'window-numbering)
(window-numbering-mode 1)
(setq window-numbering-assign-func
      (lambda ()(when (equal (buffer-name) "*Calculator*") 9)))

我用你教程里给出的 find function 查找 (cl-struct-define) 函数在windows下正常 但是linux下似乎找不到,我在想有没有可能是因为 emacs24 里没有?

应该不会,可能你安装的 emacs 版本有问题。。建议使用 24.5+ 的版本

Swiper 依赖 Emacs 24.1+,所以要确保你的 Emacs 版本符合要求,你的 Ubuntu 下的 Emacs 版本是多少?

另外需要注意的是:不同版本的 Emacs 不能公用各自 *.elc,换言之,不能在不同 Emacs 版本间同步 ~/.emacs.d/elpa (默认)文件夹,因为,旧的 Emacs 不能理解新的 Emacs 生成的 *.elc,反之可以。你有在 Windows 和 Ubuntu 之间同步~/.emacs.d/elpa (默认)吗?要是有的话,你的 Windows 下的 Emacs 版本是多少?

解决了,确实是楼上说的问题,把elpa目录删除后让emacs重新安装包就可以了 非常感谢!

回复楼上:我win下用的是emacs25版本,ubuntu下是emacs24.5

1 个赞