gói sử dụng -: init hoặc: config


13

Có bất kỳ quy tắc nào mà người dùng có thể xác định xem cấu hình gói yêu cầu :inithay :configkhông?

Câu trả lời:


13

Có bất kỳ quy tắc nào mà người dùng có thể xác định xem cấu hình gói yêu cầu :inithay :configkhông?

Không có quy tắc chung áp dụng cho tất cả các cài đặt và gói; bạn chỉ cần làm quen với ý nghĩa của các từ khóa này bằng cách đọc tệp README của use-package.

Tóm lại, :initkhối được chạy khi khởi động, như thể bạn đã đặt các hình thức cấu thành của nó ở cấp cao nhất (tức là bên ngoài một cuộc gọi thông thường đến use-package) của bạn user-init-file. Điều này có nghĩa là chúng luôn được chạy, bất kể gói tương ứng đã được tải hay chưa.

Mặt :configkhác, khối được chạy sau khi gói tương ứng đã được tải, theo eval-after-loadcơ chế.

Như vậy, bạn có thể cải thiện thời gian khởi động của mình bằng cách di chuyển các cài đặt chạy dài có thể áp dụng từ :initsang :config. Nếu bạn cần sửa đổi một biến chỉ được xác định sau khi tải một gói cụ thể, thì bạn cũng cần phải đặt nó trong :configkhối. Một số biến, chẳng hạn như gnus-home-directory, cần được đặt trước khi gói tương ứng của chúng được tải, vì vậy chúng nên được đặt vào :init. Tôi thực sự khuyên bạn nên đặt tất cả các cuộc gọi add-hook/ remove-hookcuộc gọi có thể áp dụng trong :initkhối, vì các móc nối có thể được sửa đổi ngay cả khi không bị ràng buộc và điều này mang lại nhiều tính mô đun hơn cho thiết lập của bạn.

Bạn thường có thể tránh phải tìm ra nơi đặt một cài đặt cụ thể bằng cách sử dụng :customtừ khóa mới hoặc bằng cách sử dụng trực tiếp giao diện Tùy chỉnh dễ dàng .


2

Tôi không chắc chắn nếu có một quy tắc chung (ngoài "sử dụng :initcho cấu hình sẵn trước khi tải gói thực tế và sử dụng :configcho cấu hình khác, tốt,").

Nhưng bản thân tôi sử dụng :initkhi, ví dụ, tôi muốn thêm một số phím bấm bản đồ chế độ khác để sử dụng các chức năng từ gói "này". Và vẫn muốn gói "này" được tải lười biếng.

Dưới đây là ví dụ về tải lười biếng của 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))))

PS: Nếu không có :defer, :commands, :modevà những người khác mà làm cho gói tải lười biếng, sau đó :init:confignên được nhiều hơn hoặc ít hơn như nhau (nhưng :initsẽ được đánh giá trước đó :))


4
Sửa đổi các ràng buộc chính trong một móc chế độ có nghĩa là chúng được chạy mỗi khi bạn mở một bộ đệm trong chế độ đó. Bạn chỉ cần sửa đổi các ràng buộc chính một lần, sau khi gói được tải. Bạn có thể sử dụng :bindtừ khóa cho việc này hoặc sửa đổi các ràng buộc chính trong :configkhối.
Basil

Thật vậy, không bao giờ nghĩ về nó. Nhưng đã :configquá muộn - tải lười biếng sẽ không áp dụng các ràng buộc của tôi. Và :bindvới :mapkhông thực sự ràng buộc nó.
Maxim Kim

3
:configkhông quá muộn - đó chính xác dired-mode-maplà lần đầu tiên được xác định. Có lẽ bạn chỉ đặt nó ở use-packagedạng sai dired-rangerthay vì dired, dired-mode-mapđược xác định ở đâu . Điều này cũng có thể giải thích tại sao bạn :bindkhông làm việc. Về cơ bản, hoặc bạn đang làm gì đó sai hoặc use-packagecó lỗi. Không nhầm lẫn giữa các keybindings cục bộ và eval-after-loadvới các keybindings toàn cầu của các lệnh / keymap được tải tự động.
Basil

@Basil, thx, bạn nói đúng. Vấn đề của tôi là tôi đã thiết lập use-package-always-ensurevà khi tôi cố gắng sử dụng gói-dired, nó không thể tải nó từ elpa. Nhưng có :ensure nilở đó giải quyết vấn đề và tôi có thể thiết lập tải gói chuỗi dired-> dired-rangerbằng cách sử dụng :after.
Maxim Kim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.