package.el的主要優點是基本的 安裝Emacs lisp軟件包的自動化。對於很多軟件包,你只需要安裝 這個軟件包。但是,對於某些包,特別是需要將 掛鉤添加到不同模式或要求用戶選擇高級功能或 功能,這些功能具有package.el無法預測的替代功能,特別是基於用戶首選項的 選擇,您需要在init.el或 .emacs中添加init代碼。
我發現use-package軟件包對管理elisp 軟件包非常有用。
以下是我在我的init.el文件中使用的用包
(add-to-list 'package-archives `("melpa" . "https://melpa.org/packages/"))
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
(package-initialize)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(setq use-package-verbose nil)
(eval-when-compile
(require 'use-package))
(require 'diminish)
(require 'bind-key)
然後我都有用包塊每個我所需要的軟件包。一些包裝 非常簡單,例如
(use-package undo-tree
:ensure t
:diminish undo-tree-mode
:config (global-undo-tree-mode))
use-package swiper
:ensure t
:bind ("C-s". swiper))
的:確保重點講述使用包裝,以確保它從ELPA 庫得到這個包。還有其他鍵之類的釘扎到特定 倉庫,做之前設置安裝包,裝包後, 將自動=模式ALIST,結合鍵等
真正好處是,一旦你在你的init.el文件中定義了所有使用包模塊 ,你可以將該init.el文件移動到任何新機器上,並且在你第一次啓動emacs時,它會自動下載你需要的所有包。關於use-package的另一個好處是它將自動加載軟件包設置爲 。這可以顯着加快您的emacs啓動時間。您還可以使用use-package來管理內置功能的配置或手動安裝的elisp庫。真的有助於管理你的init.el文件 ,並且使添加/刪除/調試問題變得非常容易,因爲所有相關的 代碼都在一個地方。它也像你所需要的那樣強大。這是我的組織模式 配置。它不一定是一個很好的組織結構,但它確實顯示瞭如何使用use-package進行更復雜的設置 - 我的組織模式根據我的特定要求進行了大量配置/定製。
(use-package org
:pin org
:ensure org-plus-contrib
:init
(setq org-catch-invisible-edits 'smart
org-ctrl-k-protect-subtree t
org-default-notes-file "~/Dropbox/org/notes.org"
org-directory "~/Dropbox/org"
org-ellipsis "…"
org-list-allow-alphabetical t
org-list-indent-offset 2
org-pretty-entities t
org-startup-align-all-tables t
org-startup-with-inline-images (display-graphic-p)
org-support-shift-select t)
(setq org-modules '(org-bibtex
org-crypt
org-docview
org-eww
org-info
org-irc
org-protocol))
(setq org-capture-templates
(quote
(("t" "todo" entry
(file "~/Dropbox/org/refile.org")
"* TODO %?\n\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t)
("r" "respond" entry
(file "~/Dropbox/org/refile.org")
"* NEXT Respond to %:from on %:subject\n SCHEDULED: %t\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t)
("n" "note" entry
(file "~/Dropbox/org/notes.org")
"* %? :NOTE:\n\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t)
("j" "journal" entry
(file+datetree "~/Dropbox/org/journal.org")
"* %?\n "
:empty-lines-after 1 :clock-in t :clock-resume t)
("p" "phone" entry
(file "~/Dropbox/org/refile.org")
"* PHONE %? :PHONE:\n "
:empty-lines-after 1 :clock-in t :clock-resume t)
("m" "mail" entry
(file "~/Dropbox/org/refile.org")
"* MAIL from %:from on %:subject\n\n %a"
:empty-lines-after 1 :clock-in t :clock-resume t))))
(setq org-enforce-todo-checkbox-dependencies t
org-enforce-todo-dependencies t
org-log-done 'time
org-log-into-drawer t)
(setq org-todo-keywords
(quote
((sequence "TODO(t)"
"NEXT(n)"
"STARTED(s!)"
"DELEGATED([email protected]/!)"
"HOLD([email protected]/!)"
"|"
"CANCELLED([email protected])"
"DONE(d!)"))))
(setq org-log-refile 'time
org-refile-allow-creating-parent-nodes 'confirm
org-refile-targets (quote ((nil :maxlevel . 5)
(org-agenda-files :maxlevel . 5)))
org-refile-use-outline-path (quote file))
(setq org-clock-in-resume t
org-clock-out-remove-zero-time-clocks t
org-clock-persist 'clock
org-time-clocksum-format '(:hours "%d" :require-hours t
:minutes ":%02d" :require-minutes t))
(setq org-agenda-files '("~/Dropbox/org")
org-agenda-remove-tags t)
(setq org-agenda-custom-commands
(quote
(("n" "Agenda and all TODO's"
((agenda "" nil)
(alltodo "" nil))
nil)
("wr" "Weekly Report"
((todo "DONE|CANCELLED"
((org-agenda-overriding-header "Completed and Cancelled : Last Week")))
(todo "STARTED|NEXT"
((org-agenda-overriding-header "WIP")))
(todo "HOLD|DELEGATED"
((org-agenda-overriding-header "On Hold and Delegated Tasks")))
(todo "TODO"
((org-agenda-overriding-header "Task Backlog"))))
nil nil))))
(setq org-src-tab-acts-natively t
org-hide-block-startup t)
(setq org-confirm-babel-evaluate nil
org-babel-noweb-wrap-start "«"
org-babel-noweb-wrap-end "»")
(setq org-babel-clojure-backend 'cider
org-babel-clojure-sync-nrepl-timeout 0)
(setq org-plantuml-jar-path (expand-file-name "~/.emacs.d/jars/plantuml.jar")
org-ditaa-jar-path (expand-file-name "~/.emacs.d/jars/ditaa.jar")
org-ditaa-eps-jar-path (expand-file-name "~/.emacs.d/jars/DitaaEps.jar"))
(setq org-export-backends '(ascii beamer html
latex texinfo
md odt org)
org-export-coding-system 'utf-8)
(setq org-latex-classes
'(("beamer"
"\\documentclass[presentation]{beamer}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
("article"
"\\documentclass[12pt]{hitec}
[DEFAULT-PACKAGES]
[PACKAGES]
[NO-EXTRA]
\\settextfraction{0.95}\n"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
("report"
"\\documentclass[11pt]{report}"
("\\part{%s}" . "\\part*{%s}")
("\\chapter{%s}" . "\\chapter*{%s}")
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
("book"
"\\documentclass[11pt]{book}"
("\\part{%s}" . "\\part*{%s}")
("\\chapter{%s}" . "\\chapter*{%s}")
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
("une-article"
"\\documentclass[a4paper,12pt]{scrartcl}
[DEFAULT-PACKAGES]
[PACKAGES]
\\usepackage[margin=1.5cm]{geometry}
[EXTRA]\n"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
("une-logo"
"\\documentclass[a4paper,12pt]{scrartcl}
[DEFAULT-PACKAGES]
[PACKAGES]
\\usepackage[margin=1.5cm]{geometry}
[EXTRA]
\\definecolor{unegreen}{HTML}{7AB800}
\\definecolor{Black}{HTML}{000000}
\\definecolor{White}{HTML}{FFFFFF}
\\definecolor{dimgrey}{HTML}{696969}
\\makeatletter
\\def\\@maketitle{
\\noindent \\begin{minipage}[c][4cm][t]{\\linewidth}
\\colorbox{Black}{%
\\begin{minipage}[t][4cm][c]{4cm}
\\flushleft
\\includegraphics{~/.emacs.d/img/unelogo_medium.png}
\\end{minipage}}
\\colorbox{unegreen}{%
\\begin{minipage}[t][4cm][c]{13.5cm}
\\flushright
\\Large \\textbf{\\color{White}{\\@title}} \\\\
\\vspace{4pt}
\\small \\color{White}{\\@author} \\\\
\\small \\color{White}{\\@date}
\\end{minipage}}
\\end{minipage}}
\\makeatother\n"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
("old-article" "\\documentclass[11pt]{article}"
("\\section{%s}" . "\\section*{%s}")
("\\subsection{%s}" . "\\subsection*{%s}")
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
)
(setq org-latex-hyperref-template
"\\hypersetup{pdfauthor={%a},
pdftitle={%t},
pdfkeywords={%k},
pdfsubject={%d},
pdfcreator={%c},
pdflang={%L},
colorlinks=true,
linkcolor=blue}")
(setq org-latex-listings t
org-latex-listings-options '(("basicstyle" "\\tiny")
("frame" "single")
("stringstyle" "\\color{orange}")
("commentstyle" "\\color{cyan}")
("keywordstyle" "\\color{blue}")
("showstringspaces" "false")
("breakatwhitespace" "false")
("breaklines" "true")))
(setq org-latex-pdf-process
'("lualatex -interaction nonstopmode -output-directory %o %f"
"lualatex -interaction nonstopmode -output-directory %o %f"
"lualatex -interaction nonstopmode -output-directory %o %f"))
(setq org-latex-packages-alist
'(("" "parskip")
("" "xcolor")
("" "listings")))
(setq org-html-checkbox-type 'unicode
org-html-html5-fancy t
org-html-doctype "html5")
(setq org-ascii-charset 'utf-8
org-ascii-text-width 79)
:config
(org-element-update-syntax)
(org-clock-persistence-insinuate)
(add-to-list 'org-structure-template-alist
'("p" "#+BEGIN_SRC python\n?\n#+END_SRC"
"<src lang=\"python\">\n?\n</src>"))
(add-to-list 'org-structure-template-alist
'("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"
"<src lang=\"emacs-lisp\">\n?\n</src>"))
(add-to-list 'org-structure-template-alist
'("cl" "#+BEGIN_SRC clojure-mode\n?\n#+END_SRC"
"<src lang=\"clojure-mode\">\n?\n</src>"))
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(clojure . t)
(css . t)
(dot . t)
(java . t)
(js . t)
(latex . t)
(ledger . t)
(makefile . t)
(org . t)
(perl . t)
(python . t)
(ruby . t)
(scheme . t)
(shell . t)
(sql . t)
(C . t)
(ditaa . t)
(plantuml . t)))
(when *is-a-mac*
(use-package org-mac-link
:ensure t
:bind (:map org-mode-map
("C-c g" . org-mac-grab-link))))
(bind-key "C-c l" 'org-store-link)
(bind-key "C-c a" 'org-agenda)
(bind-key "C-c b" 'org-switchb)
(bind-key "C-c r" 'org-capture))
如果你做'Mx包初始化'包是否可用?如果是這樣,那麼你可以嘗試將'package-enable-at-startup'設置爲'nil'並將'(package-initialize)'添加到你的init文件('〜/ .emacs.d/init.el'或' 〜/ .emacs'最可能)。 – Nick
加載eval-after-load'語句是你希望手動添加到你的init文件的東西。除了更新變量和麪的'customize'部分之外,Emacs通常不會更改您的init文件 - 它是您自己維護的文件。 – phils