最新のyasnippetとオートコンプリートがインストールされ、名目上機能するEmacs 24をゼロから使用しています。現在、emacs ユーザーおよび android 開発者として、お気に入りのエディターを使用して、android 開発のいくつかのタスクを自動化したいと考えています。私はelispについてほとんど何も知りません。
私の最初のタスクは、カスタム スニペットを使用して、AndroidManifest.xml に uses-sdk タグを追加することです。yasnippet では問題ありませんが、オートコンプリートを使用して、Android 固有のタグをインタラクティブに提案し、オートコンプリートしたいと考えています。問題は、AndroidManifest.xml のメジャー モードが nxml であり、nxml モードに関連するすべてのバッファーに Android の仕様を提案したくないことです。結果として、スニペット定義でバッファ名に条件を使用します。nxml-mode-hook にカスタム フックを追加したいのですが、オートコンプリート モードを有効にできませんでした。
私のスニペット:
#contributor : Me, Myself and I
#name : <uses-sdk ... />
#condition : (string= (buffer-name) "AndroidManifest.xml")
# --
<uses-sdk android:minSdkVersion="$0" />
惨めに失敗した .emacs 部分:
;; yasnippet
(add-to-list 'load-path "~/.emacs.d/yasnippet")
(require 'yasnippet)
(setq yas/trigger-key (kbd "C-c <kp-multiply>"))
(yas/initialize)
;; Develop in ~/emacs.d/mysnippets, but also
;; try out snippets in ~/Downloads/interesting-snippets
(setq yas/root-directory '("~/.emacs.d/snippets"
"~/.emacs.d/external-snippets"))
;; Map `yas/load-directory' to every element
(mapc 'yas/load-directory yas/root-directory)
;; auto-complete
(add-to-list 'load-path "~/.emacs.d/auto-complete")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict")
(setq-default ac-sources '(ac-source-yasnippet ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))
(add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup)
(add-hook 'c-mode-common-hook 'ac-cc-mode-setup)
(add-hook 'ruby-mode-hook 'ac-ruby-mode-setup)
(add-hook 'css-mode-hook 'ac-css-mode-setup)
(add-hook 'auto-complete-mode-hook 'ac-common-setup)
(global-auto-complete-mode t)
;; android specific settings
;; AndroidManifest.xml
(defun ac-android-manifest-nxml-setup()
""
(when (string= (buffer-name) "AndroidManifest.xml")
(setq ac-sources '(ac-source-yasnippet ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))))
(add-hook 'nxml-mode-hook 'ac-android-manifest-nxml-setup)
スニペットは意図したとおりに機能しますが、を使用してオートコンプリートを有効にすると、オートコンプリートは機能しますが、補完は機能しませんM-x auto-complete-mode
。
どんな助けでも大歓迎です。