Emacsで使用するすべてのパッケージをinit.elファイルで宣言します。不足しているパッケージを例えばでロードすることは可能ですか? MELPAがリストを介さずにemacsを起動し、インストールするものにマークを付けるとどうなりますか?
私の元の答えはまだ有効ですが、現在はメソッド Jordonの提案 を使用しています。 use-package
は、整頓されたEmacs構成用の素晴らしいツールです。実際、元の回答を書いたとき、私はそれをクリーンなパッケージのロードにすでに使用していました。
当時、私は そのREADMEの最下部 まですべて読むことを怠っていたため、パッケージのインストールも処理できることを理解していませんでした。
package.el
ユーザー向け
use-package
を使用して、package.elでELPAからパッケージをロードできます。これは、複数のマシン間で.emacsを共有する場合に特に役立ちます。 .emacsに配置すると、関連するパッケージが自動的にダウンロードされます。:ensure
キーは、パッケージがまだ存在しない場合は、自動的にインストールします。(use-package tex-site :ensure auctex)
package.el
をロードしてパッケージリポジトリを初期化すると、設定に
(if (not (package-installed-p 'use-package))
(progn
(package-refresh-contents)
(package-install 'use-package)))
(require 'use-package)
その後、このような多くのスニペット:
;;; Expand-region
(use-package expand-region
:ensure expand-region
:bind ("C-=" . er/expand-region))
この情報がお役に立てば、ジョードンに賛成票を投じてください。
この問題を解決するために連携する Cask と Pallet を見てください。
Caskウェブサイトから:
Emacs用のCaskは、BundlerがRubyにとって何であるかです。 EmacsでのELPA依存関係管理を無痛(できる限り無痛)にすることを目的としています。これには、ローカルのEmacsインストールとEmacsパッケージ開発の両方が含まれます。
Caskのインストール の後、Emacs構成に次のようなものを追加する必要があります。
(require 'cask)
(cask-initialize)
Caskは、elisp依存関係のためのDoman固有の言語を定義します。パッケージをインストールするには、何かが必要です ここで概説されているような :
(source melpa)
(depends-on "auto-complete")
(depends-on "dash")
(depends-on "f")
(depends-on "flycheck")
(depends-on "helm")
(depends-on "magit")
(depends-on "popup")
(depends-on "projectile")
(depends-on "s")
(depends-on "smartparens")
(depends-on "yasnippet")
これはEmacs設定ファイルではなく、~/.emacs.d/Cask
に入ることに注意してください。
パレットは、インタラクティブにインストールされたパッケージでCaskファイルを更新します。 M-x package-list-packages
を使用するため、上記のファイルを手動で管理する必要はありません。
これらの答えはすべて機能しますが、use-package
の使用を強くお勧めします
ここにあります: https://github.com/jwiegley/use-package
use-packageは不足しているパッケージを自動的にインストールするだけでなく、init.elを大幅に簡素化します。
これが私のinit.elの例です
;; initial package setup
(Push "path/to/use-package" load-path)
(require 'use-package)
(require 'package)
(mapc (lambda(p) (Push p package-archives))
'(("marmalade" . "http://marmalade-repo.org/packages/")
("melpa" . "http://melpa.milkbox.net/packages/")))
(package-refresh-contents)
(package-initialize)
;; this will install undo-tree if it's not there
;; and it will set it up how I want
(use-package undo-tree
:init (global-undo-tree-mode 1)
:bind (("C-c j" . undo-tree-undo)
("C-c k" . undo-tree-redo)
("C-c l" . undo-tree-switch-branch)
("C-c ;" . undo-tree-visualize))
:ensure t)
ここで私のinit.elを見てください: https://github.com/jordonbiondo/.emacs.d/blob/master/init.el
各use-packageブロックは、指定されたパッケージが存在しない場合はそれをインストールし、キーバインディング、フック、その他のカスタマイズなどのパッケージの追加セットアップをすべてカプセル化します。
Initファイルの少しのコードはそれを非常に簡単に行うことができます:
(setq my-onlinep nil)
(unless
(condition-case nil
(delete-process
(make-network-process
:name "my-check-internet"
:Host "elpa.gnu.org"
:service 80))
(error t))
(setq my-onlinep t))
(setq my-packages
'(ack-and-a-half
ac-nrepl
... more packages here ...
web-mode
yaml-mode
yari
yasnippet))
(when my-onlinep
(package-refresh-contents)
(cl-loop for p in my-packages
unless (package-installed-p p)
do (package-install p)))
オンラインチェックは実際には必要ありませんが、インターネット接続がないときにEmacsの起動が滞ることを防ぐのに役立ちます。
私の完全な設定については、ここを参照してください: http://steckerhalter.co.vu/steckemacs.html#sec-2-5
上記で提案された優れたオプションに加えて、 el-get もご覧ください。私は自分のemacsセットアップにそれを使用しており、非常に満足しています。
どう違うのですか?
El-getの2つの主な利点は
1)さまざまなソースからパッケージを取得できます。Webサイトには、次の可能なソースがリストされています。
github、emacswiki、GNU ELPAまたはマーマレード、非公開でホストされているページ、git、bzr、CVSなど
2)パッケージのインストール中に必要に応じて、make
などのOSコマンドを実行するために使用できます。これにより、elisp以外のパーツを含むパッケージのインストールが容易になります。 emacs-jedi 、ropemacsなど
el-getのインストール
インストールは非常に簡単で、次のbootstrapコードをWebサイトでinitファイルに追加する必要があります。
(add-to-list 'load-path "~/.emacs.d/el-get/el-get")
(unless (require 'el-get nil 'noerror)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.github.com/dimitri/el-get/master/el-get-install.el")
(goto-char (point-max))
(eval-print-last-sexp)))
(el-get 'sync)
まだインストールされていない場合は、el-get
がインストールされます。
パッケージのインストール
次に、インストールするパッケージを宣言し、el-get
にインストールさせます。
;; List of packages you want to install
(defvar my-packages '(auto-complete flycheck smart-parens...))
;; This will install any package from my-packages which is not already installed
(el-get 'sync my-packages)
OR
el-get-install <package-name> RET
を実行することで、いつでも手動でパッケージをインストールできます。この方法で数十の異なるパッケージをインストールしたいとは思いませんが、それは可能です。
パッケージの更新
パッケージの更新は、el-get-update
を実行して特定のパッケージを更新するか、el-get-update-all
を実行してインストール済みのすべてのパッケージを更新するだけです。
これが同様の質問に対する私の答えです: https://stackoverflow.com/a/14838150/24517 。コードは不足しているパッケージを自動的にインストールしますが、既存のパッケージを更新しないため、最初の起動だけが遅くなります。