TL; DR:
Aşağıdaki satırı init dosyanızın ( .emacs.d/init.elveya .emacs) en üstüne ekleyin :
(package-initialize)
Açıklama
Emacs'ın kullanabileceği daha fazla dosya oluşturmak user-init-filekesinlikle doğru bir yaklaşım değildir. Kılavuz, en azından alıntıladığınız bölümde bir çatışma olması durumunda hangisinin tercih edildiğini söylemediğinden, tek yapmanız gereken karışıklık eklemek - şimdi hangisinin gerçekte olduğunu bilmiyoruz user-init-file(değeri isteyebileceğiniz öğrenmek için incelemek).
Bu nedenle ~/.emacs.d/init.el, genellikle (kullanıcılar tarafından) tercih edilen dışındaki tüm adayları kaldırarak başlayın, çünkü bu kutsal olmayan karmaşaya katkıda bulunmaz $HOMEve en önemlisi de dahil olmak üzere tüm Emacs yapılandırma dosyalarının, yalnızca Emacs.
Varsayılan olarak , kullanıcının init dosyası yüklendikten package-initialize sonra Emacs çağrıları . O kadar yaptığı hiç bugünlerde, çünkü çoğu kullanıcıların kullanarak paketleri yükleme package.elonlar bu paketleri mevcuttur yapılacak için bir şey yapmak zorunda olmamalıdır yüzden -.
Değil Öte yandan herkes yapar, nedenle mümkün olmalıdır değil diyoruz package-initialize. Bu işlevin çağrılmasını (setq package-enable-at-startup nil)önlemek, kullanıcının init dosyasına (başka bir yere koyabilirsiniz?) Eklenerek yapılır .
package-initializekullanıcının Emacs'a bunu yapmamasını söyleyecek bir değişiklik yapmadan önce çağrılamaz ve bu nedenle init dosyasını yükledikten sonra yapılması gerekir . Kullanıcı yalnızca paketleri yükleyip daha sonra olduğu gibi kullandığı veya iyi çalışan Özel arabirimi kullanarak özelleştirdiği sürece. Ancak elisp kullanarak paketlerinizi özelleştirmek istiyorsanız, load-pathtanımladıkları işlevleri kullanmadan önce bunların gerçekten olduğundan emin olmanız gerekir .
Bunu yapmak oldukça kolay ve doğru bir şekilde belgelenmiş (eğer daha önce baksaydım, yukarıdakilerin çoğunu yazmak zorunda kalmazdım: - /
Otomatik paket yüklemesinin, init dosyası yüklendikten sonra gerçekleşmesinin nedeni, kullanıcı seçeneklerinin, paketleme sistemini etkileyen kullanıcı seçenekleri de dahil olmak üzere, yalnızca init dosyasını yükledikten sonra özelleştirilmiş değerlerini almasıdır. Bazı durumlarda, paketleri init dosyanıza açıkça yüklemek isteyebilirsiniz (genellikle init dosyanızdaki diğer bazı kodlar bir pakete bağlı olduğundan). Bu durumda, init dosyanız işlevi çağırmalıdır package-initialize. Aramadan package-load-listönce (aşağıya bakın) gibi ilgili kullanıcı seçeneklerinin ayarlandığından emin olmak size bağlıdır package-initialize. Ayrıca şunu da ayarlamanız
package-enable-at-startupgerekir:nilinit dosyasını işledikten sonra paketlerin tekrar yüklenmesini önlemek için. Alternatif olarak, başlangıçta paket yüklemesini tamamen engellemeyi seçebilir ve paketlerinizi manuel olarak yüklemek için `` Mx paketini başlat '' komutunu çağırabilirsiniz.
Yani:
;;; .emacs.d/init.el -- the `user-init-file'
(package-initialize)
(setq package-enable-at-startup nil)
(require 'use-package)
(use-package some-package
:init (setq some-package-variable "foobar")
...
;;; .emacs.d/init.el ends here
Tabii ki sorun (veya ek bir sorun) da yazım hatası Symbol's function definition is void: use-packgeinit dosyanızda olabilir ve siz emacs.se yazana kadar gerçekleşmemiş olabilir.