簡體   English   中英

自動完成模式不會在ObjC緩沖區中自動打開

[英]Auto-complete mode doesn't turn on automatically in ObjC buffers

我加載這樣的自動完成模式:

(let ((ac-path "path/to/auto-complete"))
  (add-to-list 'load-path ac-path)
  (require 'auto-complete-config)
  (add-to-list 'ac-dictionary-directories (concat ac-path "ac-dict"))
  (ac-config-default))

它在C大調模式下可以正常工作,但是在打開ObjC文件時不會自動打開。 我仍然可以手動將其打開,它將與ObjC主模式一起正常工作。

這是有關ObjC主要模式的文檔摘錄:

The hook `c-mode-common-hook' is run with no args
at mode initialization, then `objc-mode-hook'.

如果我理解正確,則自動完成功能會將鈎子添加到c-mode-common-hook ,但是objc-mode-hook以某種方式覆蓋它。 有沒有辦法解決這個問題?

謝謝。

在查看auto-complete.el的源代碼時,我偶然發現了這個定義

(defcustom ac-modes
  '(emacs-lisp-mode
    lisp-interaction-mode
    c-mode cc-mode c++-mode
    java-mode clojure-mode scala-mode
    scheme-mode
    ocaml-mode tuareg-mode
    perl-mode cperl-mode python-mode ruby-mode
    ecmascript-mode javascript-mode js-mode js2-mode php-mode css-mode
    makefile-mode sh-mode fortran-mode f90-mode ada-mode
    xml-mode sgml-mode)
  "Major modes `auto-complete-mode' can run on."
  :type '(repeat symbol)
  :group 'auto-complete)

事實證明, auto-complete功能沒有真正的全局模式。 僅使用ac-modes變量中包含的那些主要模式啟用它。

因此, .emacs下行添加到.emacs文件為我解決了此問題。

; add this line after the auto-complete mode has been loaded
(add-to-list 'ac-modes 'objc-mode)

使用以下內容:

(defun my-objc-mode-hook ()
   (auto-complete-mode 1))
(add-hook 'objc-mode-hook 'my-objc-mode-hook)

注1:當不帶參數調用時,功能auto-complete-mode為切換功能。

注意2:可以使用lambda添加匿名函數,但這有一些缺點。 最重要的是:修改函數並重新評估表達式將在早期版本的基礎上添加修改后的函數Ch v xxx將打印完整的未格式化lambda函數,這通常是無法閱讀和理解的。

(add-hook 'objc-mode-hook 'auto-complete-mode)

如果您使用的是自動完成模式,則應該這樣做。 您可以通過執行以下操作將更多復雜的事情添加到模式掛鈎:

(add-hook 'objc-mode-hook '(lambda ()
                              (something-with arguments)))

請注意,add-hook的兩個參數都用引號引起來,這是必需的,如果添加未引號的函數,則它們可能無法工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM