TL; DR:
Aşağıdaki satırı init dosyanızın ( .emacs.d/init.el
veya .emacs
) en üstüne ekleyin :
(package-initialize)
Açıklama
Emacs'ın kullanabileceği daha fazla dosya oluşturmak user-init-file
kesinlikle 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 $HOME
ve 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.el
onlar 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-initialize
kullanı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-path
tanı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-startup
gerekir:nil
init 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-packge
init dosyanızda olabilir ve siz emacs.se yazana kadar gerçekleşmemiş olabilir.