.emacsファイルを使用してパッケージのインストールを自動化する方法は?


9

私の~/.emacs(あなたが見つけることができたGitHubの上で、彼らがすでにインストールされていない場合はEmacsは、起動時に)ファイルのロード、いくつかの異なるEmacsのパッケージと私は彼らが自動的にすぐにインストールされるようにしたいと思います。これにより、Ubuntu 16.04オペレーティングシステムを再インストールする必要がある場合、を使用して各パッケージを手動でインストールする必要がなくなりますM-x package-install~/.emacs起動時に読み込まれたすべてのパッケージを自動的にインストールするようにファイルを書き込む方法はありますか?10以上の異なるパッケージをロードしているので、最小限の行でこれを実行したいので、個々のパッケージごとに追加の行を追加する必要がある場合は、~/.emacsかなり長くなります。


3
いくつかの方法がありますが、github.com
jwiegley /

.emacsファイルの61行目とuse-package同じように、複数のパッケージをで1行に読み込むことはできますか?
BH2017

package-install-selected-packages(Emacs 25.1が必要)を参照してください。
politza 2016年

好奇心から、すべてのパッケージを1行で表示することがなぜ望ましいプロパティなのでしょうか。あなたが与える唯一の理由は、あなたの~/.emacsファイルが「長くなる」のを防ぐためです。しかし、12個のパッケージのみをロードする場合、構成の余分な11行について本当に心配していますか?
nispio 2017

さて、これは数か月前だったので、具体的な考えは覚えていませんが、自動的にインストールされるリストからパッケージを追加または削除するときに必要な作業を最小限にしようとする線に沿っていたと思います。インストールされている個別のパッケージごとにファイルに複数の行を追加したくありませんでした。
2017

回答:


11

最も簡単な方法は、をインストールすることuse-packageです。

(package-initialize)
(require 'package)
(add-to-list 'package-archives
    '("melpa" . "http://melpa.milkbox.net/packages/") t)

(dolist (package '(use-package))
   (unless (package-installed-p package)
       (package-install package)))

その後

 (use-package paredit
   :ensure t)

これ:ensure tにより、パッケージが確実にインストールされます。

ロードするだけで、複数のパッケージがインストールされていることを確認します

(dolist (package '(package-a package-b package-c))
 (unless (package-installed-p package)
   (package-install package))
   (require package))))

単一の行にロードするために複数のパッケージを指定できますか?
2017年

use-packageを意味する場合は、「いいえ」ですが、上記の式は次のようになります
njdan5691

さて、私の質問は複数のパッケージに関するものです。回答を編集して、それだけで複数のパッケージが読み込まれ、存在しない場合は自動的にインストールされるようにしてください。
BH2017

dolistは '(use-package' some-other-package)に変更できますが、他の構成はできません。use-packageを使用して各パッケージの行を作成することをお勧めします。
njdan5691 2016年

10以上の異なるパッケージをロードしているので、よりコンパクトなソリューションが望ましいでしょう。
BH2017

4

package.el(依存関係として自動インストールされるパッケージではなく)インストールを要求したパッケージをカスタム変数に追跡しますpackage-selected-packages

したがって、~/.emacs(カスタムが通常のような設定を書き込むpackage-selected-packages)を別のシステムにコピーする場合、実行する必要があるのはだけですM-x package-install-selected-packages

もちろん、パッケージがない場合、これは自動的にパッケージをインストールしませんが、私はそれを機能と考えています(Emacsのようなプログラムが明示的に要求せずにネットワーク接続を行うのは間違いだと思います)。また、各パッケージを1つずつインストールする手間も省けます。


ありがとう。OPとは異なるユースケースを共有したいだけです。ドットファイルをマシン間で転送することがよくあります(特に、常に作成され、強制終了されるクラウド)。特に古いバージョンが自動トリミングされていないことを考えると、パッケージディレクトリは、elpy v-envとキッチンシンクを備えたかなりの量です。いくつかの小さなファイルをドロップしてパッケージを再インストールする方が、持ち運ぶよりもはるかに簡単です。
kkm

私は1つ言及するのを忘れていました。ローカルパッケージディレクトリが完全に欠落しているときに(package-refresh-contents)一度呼び出す必要がある(package-install-selected-packages)ため、パッケージ配布アーカイブディレクトリは、そのディレクトリのサブディレクトリに最初にキャッシュされarchive/ます。
kkm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.