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