在 GNU Emacs 中正确配置包

Proper configuration of packages in GNU Emacs

我一直无法让我在 GNU Emacs 上安装的文件(通过包存档)工作。文件已正确安装,但似乎没有任何效果。下面是我的 .emacs 文件的包存档部分,它是在我安装包时自动添加的:

     '(package-archives
       (quote
        (("gnu" . "http://elpa.gnu.org/packages/")
         ("melpa" . "https://stable.melpa.org/packages/"))))
     '(package-enable-at-startup t)
     '(package-selected-packages
       (quote
        (company-ycmd flycheck-irony company-rtags company-irony company-irony-c-headers dash solarized-theme))))

软件包信息部分的配置部分说例如 flycheck-irony,包括:

     (eval-after-load 'flycheck
       '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup))

这在我的 .emacs 文件中没有出现,让我想知道我是否遗漏了什么。任何帮助将不胜感激。

package.el 的主要优点是基本的自动化 安装 Emacs lisp 包。对于许多软件包,您需要做的就是安装 包裹。但是,对于某些包,尤其是需要添加的包 挂钩到不同的模式或要求用户 select 高级功能或 具有 package.el 无法预测的备选方案的功能,尤其是 根据用户偏好进行选择,您需要在 init.el 或中添加初始化代码 .emacs.

我发现 use-package 包对于管理 elisp 非常有用 包。

这是我的 init.el 文件中要使用的 use-package

(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 块。部分包裹 非常简单,例如

(use-package undo-tree
  :ensure t
  :diminish undo-tree-mode
  :config (global-undo-tree-mode))

use-package swiper
  :ensure t
  :bind ("C-s".  swiper))

:ensure 键告诉 use-package 确保它从 ELPA 获取这个包 存储库。还有其他键用于固定到特定的东西 存储库,在加载包之前进行设置,加载包之后, 添加到 auto=mode-alist、绑定键等

真正好的事情是一旦你定义了所有的使用包块 在您的 init.el 文件中,您可以将该 init.el 文件移动到任何新机器和 第一次启动 emacs 时,它会自动下载你安装的所有包 需要。 use-package 的另一个好处是它将设置为 自动加载包。这可以显着加快您的 emacs 启动时间。你 也可以使用 use-package 来管理内置功能的配置或 手动安装的 elisp 库。确实有助于管理您的 init.el 文件 并使得 add/remove/debug 问题变得非常容易,因为所有相关的 代码在一个地方。它也像您需要的那样强大。这是我的组织模式 配置。它不一定是一个很好的组织配置,但它确实展示了如何使用 use-package 进行更复杂的设置——我的组织模式在很大程度上满足了我的特定要求。configured/customized。

(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(w@/!)"
                    "HOLD(h@/!)"
                    "|"
                    "CANCELLED(c@)"
                    "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))

你可以这样浪费你所有的工作时间。新 emacs 中的错误错误。从一开始就40年没见过这样的了!

备选方案是:找一个真正工作的编辑器,为 Stallman 和他和蔼可亲的 emacs 祈祷。

(顺便说一句:对于 Ian Murdock 也是如此!我们生活在非常严峻的环境中!)

经过 40 年的良好使用:从版本 25 开始,emacs 不再可用。还有很多其他免费软件!数学(随机)说:不可能,这一切都可能是一种危险。

似乎有一群人想通过暗中破坏 emacs 来吓死 Stallman,看来,自由软件的敌人、破坏者和内奸可能有很多今天的黑客自己......

我不再是最年轻的了(在我高(原文如此)90 多岁的时候!)而且我一生中在整个世界看到了很多,我根据经验和高斯分布说:"errors" 在过去十年的自由软件项目中并不是危险,它是对自由软件理念的有组织破坏加上临床病态的过度工程加上代换问题的结果:有有很多认真的、受过良好教育的数学家,过去也是开发人员——今天我们只有一群疯狂的黑客和脑残 "carrierists",所以现在软件的质量正在发生巨大的变化...我眼中的灾难...但我现在太老了,无法继续战斗...

(海拉(近97))

顺便说一句:曾经(现在)也有完全没有电脑的生活——如果我记得的话,那不是最糟糕的时候……