Saya menggunakan emacs di tempat yang berbeda dan saya ingin memiliki setup dan paket yang sama diinstal di mana-mana. Saya kira saya bisa menggunakan repositori kontrol versi untuk file setup. Karena saya menggunakan Prelude , itu akan menjadi ~/.emacs.d/personal/
.
Saya tidak tahu bagaimana harus melakukan dengan paket. Apakah ada file di suatu tempat .emacs.d/
dengan daftar paket yang diinstal yang dapat saya gunakan untuk membuat emacs di komputer lain untuk juga menginstal yang terdaftar di sana?
init-file
package
version-control
El Diego Efe
sumber
sumber
Jawaban:
Tidak ada file manifes yang dibuat secara otomatis yang dapat Anda sinkronkan untuk mencapai efek yang diinginkan.
Yang mengatakan, sesuatu yang dapat Anda lakukan adalah menambahkan panggilan ke
package-install
dalam konfigurasi emacs Anda sendiri.Idenya adalah
package-install
idempoten, jadi jika paket sudah ada, tidak ada yang akan terjadi. Dengan asumsi Anda memiliki panggilan seperti itu untuk setiap paket yang Anda gunakan (atau setidaknya daun dalam grafik dependensi), yang secara efektif akan menyinkronkan paket Anda di seluruh mesin.Untuk beberapa paket, Anda dapat menggunakan yang berikut ini:
sumber
package-install
.package.el
sejak jawaban tertaut itu. Mungkin saja pada saat itupackage-install
dilakukan operasi pada paket yang ada, bukan hanya yang dihapus.Saya menjaga direktori .emacs.d saya di kontrol versi. Kemudian, di init.el saya dan file-file selanjutnya saya menggunakan paket-pakai untuk mendefinisikan pengaturan paket. Tidak hanya menggunakan-paket malas memuat paket Anda, itu akan mengunduhnya sesuai permintaan jika mereka tidak ada dari paket repo apa pun yang Anda buat.
Sebagai contoh, saya menggunakan mode-go, tetapi tidak pada setiap mesin. Di init.el saya, saya memiliki yang berikut ini:
Ini menambah hook mode, tetapi yang lebih penting, dengan menentukan
:ensure t
itu akan mengunduh paket sesuai permintaan.Untuk menjaga mesin tetap sinkron, Anda bisa checkout atau menarik dari repo dan memulai Emacs. Setiap paket baru akan diunduh dan diinstal.
sumber
:ensure go-mode
itu adalah mengulangi nama paket, Anda bisa menentukan:ensure t
:hook
kata kunci untuk menyederhanakan kode Anda.Di Emacs-25, ada variabelnya
package-selected-packages
, jadi Anda bisa mengkustomisasi variabel ini dan menggunakannyapackage-install-selected-packages
untuk memastikan mereka terinstal.sumber
Yang ingin Anda gunakan adalah Cask , yang memungkinkan Anda membuat file Cask yang menentukan paket mana yang akan diinstal
cask install
. Itu dapat digunakan untuk mengelola dependensi suatu paket, dan "dependensi" dari konfigurasi Emacs Anda dengan mudah. Masukkan file Tong Anda di bawah kontrol versi, dan instal / perbarui paket berdasarkan per mesin.sumber
Pendekatan alternatif akan menjadi sebagai berikut: karena saya tidak hanya ingin menyinkronkan paket Emacs saya, tetapi juga file lainnya (misalnya
.emacs
,.bashrc
tetapi juga direktori lain) antara server saya dan laptop saya, saya mulai menggunakanunison
, untuk melakukan sinkronisasi file dan direktori. Jadi ketika bekerja pada laptop saya, saya menjalankan sederhanaunison laptop
sebelum hal lain.~/.unison/laptop.prf
File saya memiliki bagian berikut untuk file terkait Emacs:Karena paket-paket Emacs saya (dan juga cadangan serta bookmark Emacs saya) disimpan dalam
~/.emacs.d
hal ini, pastikan saya memiliki semuanya di semua mesin saya.Pendekatan alternatif akan meletakkan
.emacs.d
direktori di direktori yang disinkronkan dengan OwnCloud, DropBox atau layanan sinkronisasi file lainnya dan kemudian membuat symlink dari~/.emacs.d
ke direktori bersama itu.sumber
Walaupun
package.el
merupakan cara standar untuk menginstal paket, Anda mungkin juga ingin mencobael-get
yang sangat berguna untuk menginstal paket yang tidak (atau tidak bisa) di elpa. Jawaban ini berkaitan dengan sinkronisasi paket-paket tersebut.Cara Anda memastikan bahwa paket yang diberikan diinstal saat menggunakan el-get adalah menambahkan sesuatu seperti berikut ini pada Anda file init
di mana paket adalah daftar paket yang ingin Anda instal. Fungsi ini mirip dengan
package-install
menginstal paket hanya jika mereka belum terinstal, jika tidak maka hanya menginisialisasi paket.sumber
Saya menggunakan sedikit trik "dicuri" dari emacs-starter-kit (saya pikir):
Jadi ketika saya membutuhkan paket, saya hanya menggunakan:
Pada startup emacs, mengevaluasi konfigurasi saya,
package.el
akan menyediakan untuk menginstal magit jika itu tidak diinstal.Anda dapat menemukan konfigurasi saya di sini:
https://github.com/mdallastella/emacs-config/
sumber
Saya memiliki direktori ~ / emacs yang dikendalikan oleh versi-lincah dan berisi semua yang dibuat oleh pengaturan emacs saya (~ / emacs / site-lisp untuk pustaka yang diunduh secara manual, ~ / emacs / elpa untuk pustaka yang diinstal dengan elpa, ~ / emacs / etc / untuk .emacs yang terpecah, ~ / emacs / dot-emacs.el yang saya symlink sebagai ~ / .emacs). Diperlukan beberapa penyesuaian beberapa paket untuk memiliki semua file penting di dalam pohon ini, tetapi berfungsi dengan baik. Beberapa bit yang spesifik mesin yang telah saya implementasikan oleh conditional pada nama sistem.
Jadi setelah saya menginstal / mengkonfigurasi ulang / mengubah apa pun, saya cukup melakukan pull / push semua perubahan di antara semua mesin yang saya gunakan.
Manfaat tambahan adalah bahwa saya memiliki riwayat lengkap konfigurasi saya dan dapat kembali / membagi dua / mengembalikan jika seandainya terjadi kesalahan.
PS mercurial tampaknya sangat cocok karena memiliki tarikan / dorong dua sisi yang alami, tetapi pengaturan serupa seharusnya tidak sulit untuk dicapai dengan git atau DVD lainnya.
sumber
Saya memiliki ini
setup-packages.el
di setup emacs saya yang merupakan hibrida kode dari blog Prelude dan Tomorokoshi di Package Management .setup-packages.el
melakukan hal berikut:elpa
paket jika tidak ada dan tambahkan direktori serta sub-direktori keload-path
.package-archives
daftar dengan Melpa.my-packages
daftar diinstal. Jika suatu paket tidak diinstal, instal.Bagaimana cara mengimplementasikannya
setup-packages.el
bawah ini ke~/.emacs.d/
direktori Anda .user-emacs-directory
,setup-packages-file
danmy-packages
variabel diinit.el
dan lakukan(load setup-packages-file)
.Ketika Anda memulai emacs untuk pertama kalinya pada mesin yang tidak memiliki paket-paket ini diinstal, semua pacakges yang tercantum di dalam
my-packages
akan mendapatkan diinstal secara otomatis.setup-packages.el
init.el
Anda membutuhkan yang berikut ini di
init.el
:sumber
Untuk mencerminkan konfigurasi saya, saya memutuskan untuk menggunakan pendekatan yang berbeda, menggunakan Syncthing ; setiap perubahan pada file config saya menyebar ke PC yang lain tanpa harus mempedulikannya, jadi ketika saya memutakhirkan paket saya hanya perlu melakukannya di salah satu PC.
sumber
RSYNC : Menyinkronkan folder / file tertentu menggunakan
rsync
, baik melalui jaringan rumah atau viassh
ke server jauh.rsync
adalah utilitas sinkronisasi satu arah yang dapat menghapus file pada target, jadi pastikan untuk mencadangkan data Anda pada sumber dan lokasi target, dan uji menyeluruh menggunakan--dry-run
opsi, sebelum melakukan hal yang nyata.Untuk membaca tentang cara mengkonfigurasi
.authinfo
file dengan benar , lihat https://www.gnu.org/software/emacs/manual/auth.html Contoh.authinfo
konten file (yang mungkin berisi beberapa entri berbeda) adalah sebagai berikut:Konfigurasikan dan gunakan fungsi
rsync-remote
untuk menyinkronkanssh
ke server jauh. Atau, gunakan fungsirsync-local
untuk menyinkronkan pada komputer yang sama atau melalui jaringan rumah tepercaya.sumber
https://github.com/redguardtoo/elpa-mirror membuat repositori lokal semua paket yang diinstal.
Penggunaannya sederhana, jalankan saja
M-x elpamr-create-mirror-for-installed
.Di komputer lain, masukkan
(setq package-archives '(("myelpa" . "~/myelpa/")))
ke Anda.emacs
dan mulai ulang Emacs.Sekarang di semua mesin, Anda mendapatkan versi paket yang sama persis.
sumber