Saya sedang mengerjakan konfigurasi Emacs khusus dan kecil yang ingin saya bagikan dengan beberapa teman sebagai repositori git untuk mereka gunakan sebagai garis dasar untuk konfigurasi masa depan mereka sendiri.
Untuk ini saya perlu beberapa cara untuk menguji konfigurasi saya dan solusi paling sederhana yang dapat saya buat adalah sesuatu seperti:
$ emacs --eval "(setq user-emacs-directory \"~/Code/my_custom_emacs.d/\")"
Tapi sepertinya saya tidak bisa membuatnya bekerja.
Setiap bantuan sangat dihargai.
.emacs.d
direktori khusus kecuali jika Anda mengubah HOME, yang tampaknya bermasalah bagi saya. Orang-orang telah memberikan solusi di bawah ini, tetapi bagi saya, ini terdengar seperti permintaan fitur yang sangat masuk akal untuk Emacs sendiri.wontfix
dan ditutup di pelacak bug.Jawaban:
Pendekatan dasar yang saya gunakan untuk ini adalah memodifikasi
$HOME
, dengan menjalankan:Anda kemudian gunakan
/path/to/dir/.emacs.d
Anda mungkin ingin juga menyambungkan semua file atau direktori yang penting dalam direktori home palsu ini kembali ke yang asli, sehingga Emacs akan melihatnya.
sumber
Cara yang saya gunakan untuk memelihara beberapa
.emacs.d
direktori secara paralel adalah sebagai berikut.emacs dimulai seperti ini:
Setiap
init.el
file dimulai seperti ini, untuk mengaturuser-init-file
danuser-emacs-directory
variabel dengan benar:Saya menemukan ini berfungsi dengan sangat andal selama beberapa bulan terakhir. Berikut ini beberapa komentar:
rusak
emacs-init-time
, yang hanya melaporkan waktu yang diperlukan untuk memuat konfigurasi sistem default, tetapi bukan file init Anda sendiri. Jika Anda tertarik untuk membuat tolok ukur waktu init Anda, Anda harus melakukannya dengan cara lain (lihat misalnya Bagaimana cara mengukur kinerja kode elisp? ).itu tidak setara dengan startup normal dan Anda harus mengurus beberapa poin tertentu. Khususnya:
after-init-hook
dijalankan sebelum file init dimuat.*scratch*
buffer dibuat sebelum file init dimuat. Anda harus mengubah mode secara eksplisit (alih-alih menggunakaninitial-major-mode
).package-initialize
; itu tidak akan dilakukan secara otomatisjalan menuju
init.el
dapat dipilih secara sewenang-wenang; khususnya, direktori tempatinit.el
tinggal tidak harus disebutkan namanya.emacs.d
. Saya menggunakan ini untuk memiliki contoh di.emacs.d.23
samping.emacs.d.24
agar dapat beralih di antara versi emacs yang berbeda (sistem yang saya gunakan di tempat kerja sudah ketinggalan zaman, dan saya tidak dapat menginstal emacs 24 pada semua mesin yang saya gunakan).alur kerja ini tidak memerlukan modifikasi lingkungan (dan terutama
HOME
envvar), yang dapat diinginkan jika Anda menjalankan program dari dalam emacs, yang dapat dipengaruhi oleh lingkungan yang dimodifikasi).sumber
--load
file ed sebagai file init. Sebagai permulaan, tampaknya bagi saya seolah-olah inisialisasi paket normal (default) tidak akan terjadi, danafter-init-hook
akan berjalan sebelum file init (palsu) dievaluasi. Ini adalah hal-hal yang dapat Anda atasi, tentu saja, tetapi perlu diketahui bahwa itu bukan hal yang persis sama dengan Emacs menggunakan jalur yang ditentukan sebagai file init.after-init-hook
. Tetapi saya harus mengatakan bahwa walaupun saya menggunakan teknik ini sepanjang waktu, saya tidak pernah menemui masalah denganafter-init-hook
(tapi saya tidak menggunakannya secara eksplisit, dan mungkin saya hanya beruntung bahwa paket yang saya gunakan tidak bergantung pada itu) . Apa yang Anda maksud dengan inisialisasi paket "normal (default) tidak akan terjadi"?command-line
tidak akan memanggilpackage-initialize
dalam situasi itu. Anda perlu menyebutnya secara manual di file init palsu.Anda dapat symlink
~/.emacs.d
, ini yang saya lakukanCobalah untuk tetap
~/.emacs.d
berorientasi konfigurasi emacs saya yaitu semua file konfigurasi emacs terkait harus hidup di folder ituKemudian saya memiliki
~/.emacs_configs
folder tempat semua folder konfigurasi (pada dasarnya folder denganinit.el
dan sisa konfigurasi) tinggal, jadi folder konfigurasi pribadi saya akan~/emacs_configs/iqbal
, distribusi pendahuluan akan berada di~/emacs_configs/prelude
Sangat awal dalam konfigurasi emacs pribadi saya, saya mengatur
user-emacs-directory
jalur penuh ke konfigurasi saya menggunakan yang berikutLalu akhirnya saya symlink
~/.emacs.d
ke konfigurasi yang sebenarnya ingin saya gunakan, misalnya. untuk menggunakan konfigurasi saya akan saya lakukanln -s ~/emacs_configs/iqbal .emacs.d
. Jika Anda ingin mencoba beberapa konfigurasi cukup salin folder konfigurasi~/emacs_configs/whatever_name
dan ubah symlinkKeuntungan dari langkah ke-3 adalah emacs yang dimulai dengan konfigurasi pribadi saya dapat berjalan tidak terpengaruh bahkan jika saya mengubah
.emacs.d
symlink saat emacs sedang berjalan.Keuntungan lain adalah karena
HOME
program eksternal yang tidak diubah, emacs mungkin perlu berinteraksi dengan yang tidak terpengaruhsumber
(setq user-emacs-directory (file-truename "~/.emacs.d/"))
sehingga mereka semua dapat berjalan tanpa terpengaruh secara bersamaan?~/.emacs.d
menggunakan daripada menggunakanuser-emacs-directory
. Saya telah menemukan setidaknya satu perpustakaan seperti itu tetapi sayangnya tidak dapat mengingat namanya.Konfigurasi yang tidak berubah
HOME
atau berfungsi dengan symlink dapat ditemukan di jawaban saya https://emacs.stackexchange.com/a/20508/934 . Dengan konfigurasi ini Anda dapat mengubahuser-emacs-directory
dengan menyetel variabel lingkungan:dan ini bahkan bekerja dengan daemon.
sumber
Saya menemukan solusi rapi ini dari EmacsWiki :
(tidak persis menggunakan direktori khusus, tetapi berfungsi dengan baik karena Anda kemungkinan besar memiliki file entri tunggal)
sumber
Tambalan yang memungkinkan Anda menentukan lokasi .emacs.d melalui variabel lingkungan `EMACS_USER_DIRECTORY 'tersedia di https://debbugs.gnu.org/cgi/bugreport.cgi?bug=15539 tetapi belum bergabung.
sumber
Setel var Anda sebelum memuat file init Anda:
Kemudian, dalam file init Anda (dalam hal ini
~/.emacs
):sumber
Memperluas jawaban dari @phils saya membuat skrip shell kecil ini (dipanggil
testrun.sh
) untuk menguji konfigurasi emacs baru saya. Ini mungkin masuk akal untuk dilakukan dalam kasus lain juga (misalnya saat menguji perubahan pada init.el Anda yang mungkin merusak emacs).sumber
Berikut ini adalah skrip kecil berdasarkan jawaban dan komentar @ Phil tentang mengubah
HOME
variabel lingkungan, dan kemudian memulihkannya di dalam Emacs.sumber
Jika use case berbagi direktori konfigurasi emacs tunggal ".emacs.d" di semua pengguna mesin linux maka solusi ini https://emacs.stackexchange.com/a/4258/5488 akan berfungsi dalam banyak kasus, tetapi dalam beberapa kasus case emacs mencoba menulis file sementara ke direktori user-emacs (seperti file .ido.last). Dalam kasus seperti itu jika direktori konfigurasi bersama memiliki izin menulis untuk semua pengguna maka itu akan berfungsi tetapi mungkin bukan solusi yang diinginkan karena setiap pengguna sistem mungkin tidak ingin berbagi direktori yang sama untuk menyimpan file temp. Dalam hal demikian solusi berikut akan menjadi pilihan yang lebih baik.
File konfigurasi bersama yang umum .emacs.d / init.el harus dimulai dengan
Buat config bersama .emacs.d memiliki izin baca untuk semua pengguna (tidak perlu memiliki izin menulis)
Setiap pengguna akan memiliki direktori "~ / .emacs.d /" sendiri tetapi hanya digunakan untuk menyimpan file sementara tetapi paket dan konfigurasi lainnya dimuat dari direktori konfigurasi bersama.
sumber