.Emacs'i değiştirdikten sonra nasıl yeniden yükleyebilirim?


375

Emacs'ı, Emacs'ı yeniden .emacsbaşlatmadan güncellediğim tüm tanımlarımı yeniden yüklemeye nasıl alabilirim ?


18
Emacs genellikle bir işletim sistemi olarak kabul, ama ... s / reboot / restart /?
William Pursell

6
Ben bir geliştirici değilim, bu yüzden geliştiricilere hemen mantıklı cevapların bir sürü benim için çok şey ifade etmiyor
Yazz.com 19

4
@MJB, Stack Overflow'un amacı en temel sorular için bile bir bilgi deposu olmaktır. Bu soru Yığın Taşması amacına mükemmel uyum sağlar. Bkz. Stackoverflow.com/faq
chollida


10
haha şimdi beş yıl sonra önerilen "önce Google araması" burada! güzel
JimLohse

Yanıtlar:


350

Load-file komutunu kullanabilirsiniz ( M-x load-fileardından, düzenlenmekte olan dosya olan varsayılan dosya adını kabul etmek için return tuşuna iki kez basın).

Ayrıca noktayı herhangi bir sexp'in sonuna taşıyabilir ve C-xC-esadece bu sexp'i yürütmek için basabilirsiniz. Yalnızca bir veya iki satırı değiştiriyorsanız, tüm dosyayı yeniden yüklemek gerekmez.


22
Bunun her zaman tam olarak düşündüğünüzü yapmayabileceğini unutmayın. İçeriği kayan değişkenleriniz varsa (yani tersine bir boole ayarlamak), davranış dosyayı yüklemekle aynı olmaz.
chollida

4
Genel olarak herhangi bir yan etkinin istenen davranışı
bozması

Bunu yaptığımda, mesajı alıyorum: kod-kod-dönüşümü: Sembolün değişken olarak değeri geçersiz: n
Chris Marie

2
A defunya da arkasındaki noktayı taşımak yerine defvar, bildirim gövdesi ve türünün içinde de bırakabilirsiniz C-M-x. Çok kullanışlı.
Thomas

151

Çok garip ki çok uygun

M-x eval-buffer

burada bahsedilmez.

Eğer .emacsaradaki idempotent ise, tampondaki tüm kodu hemen değerlendirir .


3
Kim bunun .emacsidempotent olduğunu (veya olması gerektiğini) söylüyor ?
mike

@mike: ben değil. "A, b doğruysa" benim için, "a, b doğruysa", ama ne demek istediğini görebiliyorum. Daha fazla netlik için verilene değiştiririm.
Peter

7
@ mike: .emacsidempotent olmamak ne zaman mantıklı olur ?
Zaz

Bunun ilk öneri olduğunu düşünürdüm.
Stryker

1
İyi bir stil olduğunu söyleyemem ama olabilir. Örneğin, zaten tanımlanmışsa (ilk başlangıçtan itibaren) bir işlevi yeniden tanımlamamayı seçebilirsiniz. İnit dosyanızı değerlendirirken tanımında bir değişiklik göremeyebilirsiniz.
17'de Kaligule

43

Genellikle değiştirilen bölgeyi yeniden değerlendirebilirsiniz. Değiştirdiğiniz ~ / .emacs bölgesini işaretleyin ve ardından kullanın M-x eval-region RET. Bu, tüm dosyayı yeniden değerlendirmekten genellikle daha güvenlidir, çünkü iki kez yüklendikten hemen sonra tam olarak çalışmayan bir .emacs dosyası yazmak kolaydır.


2
İlginç. Ben idempotent olmayan bir .emacs dosyası fikrini düşünmemiştim. ELisp ile başlarken dikkat edilmesi gereken bir şey
Erik

2
Bunun bir .emacs dosyayı bulmak için nadir olduğunu tahmin ediyorum olduğu bir yürütme tamamen aynı durumu ile sonuçlanan iki infaz güçlü anlamda en azından İdempotent. En azından, çeşitli listelere, genellikle ikinci kez yürütüldüğünde yinelenen girişleri bastırmayacak şekilde eklemek oldukça yaygındır.
Dale Hagglund

1
Başka bir düşünce: yukarıda önerdiğim yaklaşımı kullanarak, sahip olduğunuz emacs durumunun .emac'lerinizin gerçekte yaptığı şey olmadığı mümkündür. Yani .emacs dosyasının tamamını temiz bir sayfadan yürütmediğiniz için, aslında ne istediğinizi yaptığını bilmiyorsunuz.
Dale Hagglund

1
Bununla birlikte, .emac'leri idempotent bir şekilde yazmak mümkün olmaz mı? Küresel devlet kararsız.
Ehtesh Choudhury

39

Etkin olan arabellekte .emacs dosyanızı açtıysanız:

MX Eval-Buffer

12
Burada dikkat edilmesi gereken bir şey yapıyor olmasıdır olabilir özdeş bir yeniden başlatma yaklaşımına bir durumda bırakmayacak. (Onaylanmış örnek: .emac'lerinizde bir "geçiş" etkisi varsa).
luapyad


14

Aşağıdakiler yapmalı ...

M-x load-file

13

çözüm

M-: (load user-init-file)


notlar

  • Eğer doğrusunu yazarak Eval:(parantez dahil) istemi
  • user-init-file~/.emacsvarsayılan olarak değeri (yapılandırma dosyası yolunu gösteren) tutan bir değişkendir
  • (load)kısa, eski ve etkileşimli olmayan sürümleridir (load-file); bir emacs komutu ( M-xyazılacak) değil, sadece bir elisp işlevi

Sonuç

M-: > M-x


-:> Ctrl Alt x nedir? mantığınıza dayanarak init dosyasındaki sadece bir satır değiştiğinde M-: <CMx'i hayal ediyorum? Belki de sadece ==
Robert Houghton

12

Diğerleri sorunuzu belirtildiği gibi zaten cevapladı, ancak genellikle yazdığım satırları yürütmek istediğimi düşünüyorum. bunun için CtrlAltx, lisp iyi çalışıyor.


3
Ayrıca bkz eval-lastsexp.C-x C-e
Derek Slager

İle C-M-x, "Lisp sonunda" olmak zorunda değilsiniz - C-x C-ebelki düşünüyorsun ? Bununla ilgili güzel bir şey C-M-x, nokta bir işlev / değişken bildiriminin ortasında olsa bile onu çağırabilmenizdir.
Thomas

Muhtemelen sadece Cx Ce kullandığım zaman lisp'i bitirme alışkanlığına girdim. Yakaladığınız için teşekkürler!
Bahbar

9

Başlangıçta bunu yapmamanızı öneririm. Bunun yerine, yeni bir emacs oturumu başlatın ve doğru çalışıp çalışmadığını görmek için yaptığınız değişiklikleri test edin. Bu şekilde yapmanın nedeni, yüklenemeyen veya temiz yüklenemeyen, çalışamaz bir .emacs dosyanızın olduğu bir durumda sizi bırakmaktan kaçınmaktır. Düzenlemenizin tamamını orijinal oturumda ve tüm testlerinizi yeni bir oturumda yaparsanız, rahatsız edici kodu yorumlamak için her zaman güvenilir bir şeyiniz olur.

Sonunda değişikliklerinizden memnun olduğunuzda, devam edin ve yeniden yüklemek için diğer yanıtlardan birini kullanın. Kişisel tercihim, evalyalnızca eklediğiniz / değiştirdiğiniz bölümdür ve bunu yapmak için eklenen / değiştirilen kod ve çağrı bölgesini vurgulamanız yeterlidir M-x eval-region. Bunu yapmak, luapyad'ın işaret ettiği gibi, değerlendirilen kodu en aza indirir, istenmeyen yan etkileri en aza indirir.


9

Klavye kısayolu:

(defun reload-init-file ()
  (interactive)
  (load-file user-init-file))

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file

parlak! Bu çok iyi!
PinkCollins

7
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el

4

Şu anda Ubuntu 15.04 kullanıyorum; Bunun için bir anahtar tanımlamayı seviyorum.
[M-insert] klavyemdeki alt-insert'e çevirir.
Bunu .emacs dosyanıza koyun:

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

3

Bunu init dosyanızda tanımlayın ve Mx reload-user-init-file ile çağırın

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

2

M-x eval-bufferÇalışacak olsa da, geçiş ve diğer benzer şeylerle ilgili sorun yaşayabilirsiniz. Daha iyi bir yaklaşım, .emac'lerinizde (veya sadece ortalığı karıştırıyorsanız arabellekte) yeni olanları işaretlemek veya vurgulamak olabilir M-x eval-region. Bu yardımcı olur umarım.


2

İşte yapılandırmanızı hızlı bir şekilde test etmenin hızlı ve kolay bir yolu. C-x C-eBelirli bir lisp sonunda belirli işlevleri tek tek yürütmek için de kullanabilirsiniz .

Cx Ce, etkileşimli derlenmiş Lisp işlevi olan eval-last-sexp (global haritada bulunur) komutunu çalıştırır.

Cx Ce'ya bağlıdır.

(eval-last-sexp EVAL-SON-SEXP-ARG-DAHİLİ)

Sexp'i noktadan önce değerlendirin; eko alanında baskı değeri. Etkileşimli olarak, önek bağımsız değişkeni ile çıktıyı geçerli arabelleğe yazdırır.

Normalde, bu işlev 'eval-expression-print-length' ve 'eval-expression-print-level' değişkenlerinin değerine göre uzun çıktıyı keser. Bununla birlikte, sıfır önek argümanı ile böyle bir kısaltma yoktur. Böyle bir önek argümanı, tamsayıların birkaç ek biçimde (sekizli, onaltılık ve karakter) yazdırılmasına neden olur.

'Eval-expression-debug-on-error' varsayılan değilse nil değilse, bu komut tüm hataların hata ayıklayıcıya girmesini sağlar.



0

Bunun gibi emac'lar için tuş ciltleme ayarlayabilirsiniz

;; reload emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file) 

Umarım bu yardımcı olur!


-2

Emacs'ın içinde bir kabuğunuz varsa, şunları da yapabilirsiniz:

. ~/.emacs

Birkaç tuş vuruşu kaydedebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.