Saya seorang pemula di Emacs (menggunakannya selama sekitar 2 minggu sekarang dan menyukainya). Ketika saya memperbarui dan memperluas ~/.emacs.d/init.el
file saya , hal-hal yang saya tulis di sana tergantung pada paket tertentu yang saya instal dari MELPA gunakan M-x package-install
, pada .el
file yang saya tulis sendiri, dll.
Pertanyaan saya adalah, haruskah saya di masa depan beralih komputer misalnya, apa cara terbaik untuk mendapatkan lingkungan Emacs yang sama persis pada komputer baru seperti yang saya miliki sekarang?
init.el
(menggunakan git misalnya), pendekatan ini juga berfungsi (berdasarkanuse-package
): lunaryorn.com/posts/…~/.emacs.d
direktori Anda, jadi gunakan metode apa pun yang Anda inginkan untuk menyinkronkannya di antara mesin. (mis. repositori Github, atau folder Dropbox, atau apa pun yang paling cocok untuk Anda).Jawaban:
Solusi yang benar adalah dengan menggunakan
straight.el
, manajer paket yang saya tulis untuk mengatasi masalah ini. Anda dapat menemukan detail lebih lanjut tentang ini di jawaban lain untuk pertanyaan ini .Jawaban ini, yang ditulis beberapa bulan sebelum saya mulai bekerja
straight.el
, sebelumnya menggambarkan cara yang sangat rendah untuk mencapai solusi parsial. Pendekatan ini dijelaskan secara singkat di bawah ini; Saya tidak lagi merekomendasikannya.Bahkan jika Anda tidak ingin menggunakan
straight.el
, Anda setidaknya harus mengadopsiuse-package
. (Bukan karena keduanya saling eksklusif — saya percaya pengaturan terbersih berasal dari penggunaan keduanya.)Mulailah dengan mendefinisikan daftar paket di file init Anda:
Kemudian instal secara otomatis:
Jika Anda menyimpan
init.el
file Anda di bawah kontrol versi, maka menyinkronkannya ke komputer lain akan menghasilkan paket Anda diinstal secara otomatis. Tentu saja, versi yang diinstal akan sangat berbeda, dan konfigurasi Anda tidak dapat berfungsi di luar kotak sebagai hasilnya. Ini adalah kelemahan mendasarpackage.el
, dan merupakan salah satu alasan mengapa pendekatan ini buruk. Lihat lagistraight.el
. Perhatikan juga bahwa kode yang diuraikan di atas memisahkan daftar paket Anda dari konfigurasi Anda untuk paket-paket itu, membuatnya lebih sulit untuk melacak hal-hal dalam file init Anda. Ini adalah kerugian besar lainnya. Lihat lagiuse-package
.sumber
package.el
untuk memperbarui paket, Anda akan memiliki perubahan yang tidak dipentaskan dalam repositori Anda, dan Anda harus membuat komitmen untuk menyertakan pembaruan paket.M-x list-packages RET U
.straight.el
hanya untuk menginstal paket Emacs. Nix adalah ide bagus, tapi itu tidak dioptimalkan dengan baik untuk pengembangan paket Emacs, sejauh yang saya tahu (tolong perbaiki saya jika saya salah) . Jika Anda menggunakan manajer paket sistem untuk menginstal paket Emacs, Anda tidak akan dapat hanya mengedit kode sumbernya dan kemudian komit dan dorong perubahan Anda ke atas. Terakhir kali saya melihat konfigurasi Nix untuk paket Emacs, sepertinya terlalu rumit dan umumnya lebih rendah daristraight.el
pengalaman pengembangan. Tapi, apa pun yang mengapungkan perahumu.Jika Anda menggunakan paket-pakai , Anda dapat memindahkan file itu dari komputer ke komputer, dan ketika Emacs dijalankan, selama Anda memiliki akses internet, itu akan menarik paket-paket dan mengkonfigurasinya.
Pertama, atur perpustakaan paket:
Dan kemudian bootstrap
use-package
:Sekarang, alih-alih mengkonfigurasi Emacs dan dengan asumsi paket diinstal, gunakan
use-package
untuk menginstal dan mengkonfigurasinya. Misalnya, untuk beberapa pengaturan helm saya:sumber
init.el
), tetapi ada banyak lagi untuk itu. Misalnya, ini tidak akan mem-port file dabbrev, atau cuplikan khusus Anda atau hal lainnya.:ensure t
keuse-package
deklarasi atau setuse-package-always-ensure
ket
. Kalau tidak, ia tidak akan menginstal secara otomatis pada sistem lain ketika menyalin konfigurasi.Manajemen paket generasi selanjutnya dengan
straight.el
Setelah perjuangan panjang dan frustasi untuk menggunakan
package.el
+ Quelpa untuk mengelola paket saya, saya menggigit peluru dan menulis manajer paket saya sendiri . Ini dimaksudkan untuk sepenuhnya menggantikanpackage.el
dengan memberikan pengalaman manajemen paket yang unggul dalam hampir setiap cara.Anda dapat membaca dokumentasi yang sangat luas untuk mempelajari semua fitur-fiturnya, tetapi yang paling relevan untuk pertanyaan ini adalah yang
straight.el
berfokus pada reproduksibilitas sempurna . Ini berarti tidak masalah apakah Anda memulai Emacs secara normal, atau memulainya dengan mesin baru, dan bahwa setiap perubahan lokal dikendalikan oleh versi dan dapat dikembalikan ke status kanonik. Secara praktis, ini dicapai dengan (1) mengkloning paket sebagai repositori Git, dan menyediakan alat otomatis untuk mengelola negara mereka; (2) menggunakan init-file sebagai satu - satunya sumber kebenaran untuk status manajemen paket, tanpa data yang dapat diubah disimpan di tempat lain; dan (3) menggunakan versi penguncian versi opsional untuk menentukan revisi Git yang tepat dari setiap paket, ditambah repositori resep danstraight.el
diri.Untuk memulai, masukkan potongan bootstrap , yang akan menginstal dan mengaktifkan
straight.el
. Kemudian, untuk memastikan bahwa suatu paket diinstal, cukup lakukan panggilan kestraight-use-package
dalam file init Anda:Ya, sesederhana itu. Tidak berurusan dengan
package-refresh-contents
atau semua sampah itu. Jika Anda menghapus formulir ini dari file init Anda dan memulai kembali Emacs, Proyektil tidak akan lagi dimuat (tidak seperti dipackage.el
). Ini berarti Anda tidak perlu khawatir tentang konfigurasi Anda yang entah bagaimana tidak bekerja pada mesin baru karena Anda secara tidak sengaja bergantung pada paket yang tidak dideklarasikan.Anda dapat menginstal paket di mana pun dan kapan pun Anda mau, di seluruh file init Anda (tidak perlu mendeklarasikan daftar mereka pada satu titik). Tentu saja Anda juga bisa melakukannya
jika Anda lebih suka daftar. Namun saya sarankan Anda gunakan
use-package
untuk mengelola konfigurasi paket Anda. Pertama Anda harus menginstalnya:Kemudian, karena
straight.el
telah terintegrasi denganuse-package
, "just works" berikut:Setelah Anda menulis file init Anda untuk menginstal paket yang dibutuhkan, jalankan
M-x straight-freeze-versions
untuk menyimpan versi lockfile~/.emacs.d/straight/versions/default.el
. Anda harus menyimpan file ini di bawah kontrol versi, karena itu akan memungkinkanstraight.el
untuk memeriksa versi yang benar dari semua paket Anda, ketika Anda pertama kali meluncurkan Emacs pada mesin baru. (Anda dapat secara manual kembali ke versi yang ditentukan dalam penguncian menggunakanM-x straight-thaw-versions
.)Untuk mendukung gagasan dotfiles mesin-lokal yang saya sebutkan di jawaban saya yang lain ,
straight.el
menawarkan sistem profil . Saya masih merekomendasikan penggunaan symlink untuk dotfiles Anda (dalam hal ini,,init.el
init-file lokal Anda jika berlaku, dan versi lockfile jika Anda ingin menggunakannya).Jika Anda bertanya-tanya bagaimana
straight.el
membandingkan dengan manajer paket lain, lihat bagian perbandingan yang luas . Tetapi ada lebih banyak dokumentasi tentang hal-hal lain juga.sumber
Anda dapat menggunakan tong untuk mengelola paket Anda. Gunakan git / github untuk kontrol sumber dan sinkronisasi emfs dotfile Anda.
sumber