use-package -: init veya: config


14

Kullanıcı paket yapılandırma gerektirir olmadığını belirleyebilir hangi herhangi bir kural var mı :inityoksa :config?

Yanıtlar:


13

Kullanıcı paket yapılandırma gerektirir olmadığını belirleyebilir hangi herhangi bir kural var mı :inityoksa :config?

Tüm ayarlar ve paketler için geçerli olan genel bir kural yoktur; Sadece okuyarak bu anahtar kelimeler anlamını tanıyın gerekir README dosyasını arasında use-package.

Özetle, :initüst düzeyinde kendisini oluşturan formlar yerleştirilmiş sanki blok, başlangıçta (tipik çağrının yani dışında hiç çalıştırılır use-package, aramalarınızdan) user-init-file. Bu, karşılık gelen paketin yüklü olup olmadığına bakılmaksızın her zaman çalıştırıldıkları anlamına gelir.

:configKarşılık gelen paket yüklendikten sonra blok, diğer taraftan, bir arada, çalıştırılan eval-after-loadmekanizma.

Bu nedenle, geçerli uzun süren ayarları konumundan ' :inite taşıyarak başlangıç ​​zamanınızı artırabilirsiniz :config. Yalnızca belirli bir paket yüklendikten sonra tanımlanan bir değişkeni değiştirmeniz gerekirse, benzer şekilde bunu :configbloğa yerleştirmeniz gerekir . gnus-home-directoryKarşılık gelen paket yüklenmeden önce bazı değişkenlerin ayarlanması gerekir, bu yüzden yerleştirilmeleri gerekir :init. Kancalar bağlanmamışken bile değiştirilebildiğinden, tüm uygulanabilir add-hook/ remove-hookçağrıları :initbloğa koymanızı şiddetle tavsiye ederim ve bu, kurulumunuza daha fazla modülerlik kazandırır.

Yeni :customanahtar kelimeyi kullanarak veya doğrudan Kolay Özelleştirme arabirimini kullanarak belirli bir ayarın nereye yerleştirileceğini bulmak zorunda kalmazsınız .


2

Genel bir kural olup olmadığından emin değilim (" :initgerçek paket yüklemeden önce ön yapılandırma :configiçin kullanın ve diğer, iyi, yapılandırma için kullanın " dışında).

Ama kendim için :init, örneğin, "bu" paketin işlevlerini kullanmak için başka mod haritası tuş bağlamalarını eklemek istediğimde kullanıyorum. Ve yine de "bu" paketin tembel yüklenmesini istiyorum.

İşte tembel yükleme örneği dired-ranger:

(use-package dired-ranger
  :commands (dired-ranger-copy dired-ranger-paste dired-ranger-move)
  :init
  (add-hook 'dired-mode-hook
            (lambda ()
              (define-key dired-mode-map (kbd "M-w") 'dired-ranger-copy)
              (define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)
              (define-key dired-mode-map (kbd "C-c C-y") 'dired-ranger-move))))

Not: orada hiçbir Eğer :defer, :commands, :modeve diğerleri daha sonra, paket yükleme tembel kılan :initve :config(ama az ya da çok aynı olmalıdır :init:) önceki değerlendirilecektir)


4
Bir mod kancasındaki anahtar bağlarının değiştirilmesi, bu modda her arabellek açışınızda çalıştırıldıkları anlamına gelir . Paket yüklendikten sonra anahtar bağlantılarını yalnızca bir kez değiştirmeniz gerekir. Bunun için :bindanahtar kelimeyi kullanabilir veya :configbloktaki anahtar bağlarını değiştirebilirsiniz .
Basil

Gerçekten, hiç düşünmedim. Ama :configçok geç - tembel yükleme bağlarımı uygulamaz. Ve :bindile :mapaslında bağlamaz.
Maxim Kim

3
:configçok geç değil - tam dired-mode-mapolarak ilk tanımlandığı zamandır. Muhtemelen sadece yanlış koyarak konum use-packageşeklinde dired-rangeryerine dired, nerede dired-mode-maptanımlanır. Bu aynı zamanda neden :bindçalışmadığını da açıklayabilir . Temel olarak, ya yanlış use-packagebir şey yapıyorsunuz ya da bir hata var. Yerel tuş bağlantılarını ve eval-after-loadotomatik yüklenen komutların / tuş haritalarının genel tuş bağlantılarını karıştırmayın .
Fesleğen

@Basil, teşekkürler, haklısın. Benim sorunum ayarladım use-package-always-ensureve -paket-dired kullanmaya çalıştığınızda elpa onu getiremedi oldu. Ama :ensure nilorada sorunu çözmek ve zincirleme paket yükleme dired-> dired-rangerkullanarak ayarlayabilirsiniz :after.
Maxim Kim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.