首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行配置,以便在.emacs中的cperl模式钩子中定义多个操作?

如何进行配置,以便在.emacs中的cperl模式钩子中定义多个操作?
EN

Stack Overflow用户
提问于 2014-07-26 14:10:37
回答 1查看 119关注 0票数 0

这是我的.emacs的摘录

案例1:使用下面的配置,perl完成模式工作得很好。

代码语言:javascript
复制
;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------

(defalias 'perl-mode 'cperl-mode)
(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))

(defun my-cperl-hook-func()
  (add-to-list 'load-path "~/.emacs.d/elpa/perl-completion-20090527.2336")
  (require 'perl-completion)
  (perl-completion-mode t)
  ;; (make-local-variable 'compile-command)
  ;;  (setq compile-command
  ;;        (concat "perl " (buffer-file-name)))
  ;;  (cperl-define-key "\C-c\C-c" 'compile)
  )

(add-hook 'cperl-mode-hook 'my-cperl-hook-func)

案例2:使用下面的配置,cperl模式下的CASE将成功启动perl编译。

代码语言:javascript
复制
;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------
(defalias 'perl-mode 'cperl-mode)

(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))

(defun my-cperl-hook-func()
  ;; (add-to-list 'load-path "~/.emacs.d/elpa/perl-completion-20090527.2336")
  ;; (require 'perl-completion)
  ;; (perl-completion-mode t)
  (make-local-variable 'compile-command)
  (setq compile-command
        (concat "perl " (buffer-file-name)))
  (cperl-define-key "\C-c\C-c" 'compile)
  )

(add-hook 'cperl-mode-hook 'my-cperl-hook-func)

案例3:然而,下面的代码通过取消钩子函数(my-cperl-钩子函数)中的所有行(my-cperl-钩子函数)来启动perl编译,使得perl-完成和C-c -c都可以启动。

如何使两个动作在cperl模式挂钩中有效?

代码语言:javascript
复制
;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------
(defalias 'perl-mode 'cperl-mode)

(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))

(defun my-cperl-hook-func()
  (add-to-list 'load-path "~/.emacs.d/elpa/perl-completion-20090527.2336")
  (require 'perl-completion)
  (perl-completion-mode t)    
  (make-local-variable 'compile-command)
   (setq compile-command
         (concat "perl " (buffer-file-name)))
   (cperl-define-key "\C-c\C-c" 'compile)
  )

(add-hook 'cperl-mode-hook 'my-cperl-hook-func)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-31 00:34:41

首先,如果您使用elpa和包系统安装perl-completion,它将自动将其添加到加载路径,因此add-to-list load-path是不必要的。不幸的是,该包没有包含用于perl-completion-mode的自动加载,因此(require 'perl-completion)是必要的。

在检查了perl-completionhttp://www.emacswiki.org/emacs/perl-completion.el之后,它似乎使用了C-c C-c作为前缀。不幸的是,通过使用它作为前缀,它破坏了在C-c C-c中绑定compile的能力。

我使用下面的方法来测试这一点,并将其绑定到C-c C-c c

代码语言:javascript
复制
(require 'package)
(add-to-list 'package-archives
  '("melpa" . "http://melpa.milkbox.net/packages/") t)

(package-initialize)

(package-refresh-contents)
(package-install 'anything)
(package-install 'perl-completion)

;;-------------------------------------------------------
;; -*-- CPerl mode
;;-------------------------------------------------------

(defalias 'perl-mode 'cperl-mode)

(add-to-list 'auto-mode-alist '("\\.[apP][Llm]$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.al$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.t$" . cperl-mode))
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))

(defun my-cperl-hook-func()
  (require 'perl-completion)
  (perl-completion-mode t)
  (make-local-variable 'compile-command)
   (setq compile-command
         (concat "perl " (buffer-file-name)))
   (cperl-define-key "\C-c\C-cc" 'compile)
  )

(add-hook 'cperl-mode-hook 'my-cperl-hook-func)

保存为cperl-init.el,没有使用emacs -q -l cperl-init.el的其他包运行。

如果您想使用C-c C-c进行编译,我认为您必须解除它在perl完成中的使用。看起来cperl本身与模式编译有一定的兼容性,但不确定它是否添加了任何绑定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24971885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档