2014-05-12 18 views
7

Ieri, I :q 'd Vim per provare Emacs per un po'. Ho iniziato a utilizzare Elisp (che è cento volte migliore di VimScript), ma anche quando l'ho installato per la prima volta (tramite yum) e non ho modificato nulla, sono occorsi circa 30 secondi per avviarlo, e lo è ancora (sia la GUI che -nw).Emacs impiega incredibilmente a lungo per iniziare

ho controllato il buffer *Messages*:

Loading /usr/share/emacs/site-lisp/site-start.d/desktop-entry-mode-init.el (source)...done 
Loading /usr/share/emacs/site-lisp/site-start.d/rpmdev-init.el (source)...done 

I file sembrano essere specifici per il pacchetto RPM ho installato. Ho provato a cambiare i loro nomi, eppure non c'era differenza. Ci vogliono ancora 30 secondi.

L'ho risolto parzialmente non uscendo mai da emacs (l'ho solo sospeso) e provando a fare tutto in esso, ma sarebbe bello aprire occasionalmente due Emacs, soprattutto perché ho la tendenza a usare il mio emulatore di terminale funzione split piuttosto che qualcosa come tmux.

Mi sono reso conto che Emacs si caricava più lentamente di Vim, ma questo sembra ridicolo per una nuova installazione. Qualcuno ha idea di cosa sta succedendo?

Grazie! file di PROBLEMA

+2

Un sacco di utenti Emacs infatti avviare Emacs una volta per sessione; puoi aprire tutti i frame che vuoi (avvia 'emacs -d' quando accedi ed esegui' emacsclient' per modificare un file). Ma il tempo di avvio degli anni '30 non è normale; hai un pacchetto che fa qualcosa di strano. 'Emacs -q' si carica velocemente? In caso contrario, guardando il buffer * Messages *, quale file di init impiega molto tempo? Da dove hai preso Emacs (quale pacchetto di distribuzione) e da dove viene il file init lento? – Gilles

+0

'emacs -q' non è più veloce. La rimozione di entrambi i file init non lo risolve. L'ho installato usando 'yum install emacs', semplicemente. Si chiama 'emacs.x86_64',' 1: 24.3-11.fc19' in base a 'yum'. – jocap

+4

Oh, mi dispiace, avrei dovuto chiedere: è 'emacs -Q' più veloce? ('-q' non carica il tuo file init personale,' -Q' non carica neanche il file init del sistema.) Se è (e ho il sospetto che lo sia), uno dei pacchetti di sistema è il colpevole. Altrimenti, questo richiede una pistola più grande. Esegui 'strace -tt -o emacs.strace emacs -q -nw' e pubblica la traccia. (Questo può essere utile anche se si tratta di un pacchetto di sistema che fa una pausa così lunga.) – Gilles

risposta

11

Emacs delle dice:

*** Emacs startup on GNU/Linux systems (and possibly other systems) is slow. 

This can happen if the system is misconfigured and Emacs can't get the 
full qualified domain name, FQDN. You should have your FQDN in the 
/etc/hosts file, something like this: 

127.0.0.1 localhost 
129.187.137.82 nuc04.t30.physik.tu-muenchen.de nuc04 

The way to set this up may vary on non-GNU systems. 

Questa "avvio lento" di solito proviene da un timeout, e 30s suoni circa la destra.

Come nota a margine: la ricerca DNS che causa questo rallentamento è stata considerata importante/utile nei giorni in cui (quasi) tutte le macchine avevano un indirizzo IP statico. Al giorno d'oggi le informazioni raccolte in questo modo non giustificano lo sforzo, quindi a partire da Emacs-25, Emacs non esegue questa ricerca DNS, quindi questo problema non dovrebbe semplicemente esistere più.

+0

Sembra che non ci siano problemi con/etc/hosts. Dice: '127.0.0.1 localhost.localdomain localhost' ' :: 1 localhost6.localdomain6 localhost6'. L'ho cambiato con il tuo, non l'ho aiutato. – jocap

+0

Stefan è corretto. se il comando 'hostname -f' restituisce un valore, allora il tuo nome di dominio completo è impostato, ed emacs si avvierà rapidamente. – Gabe

1

Ok, ho una soluzione (strana e temporanea). Devo eseguire dhclient em1 per accedere a Internet, il che consente a Emacs di caricare 30 secondi, probabilmente a causa di un certo timeout. Quindi, avendo già eseguito dhclient em1, io uso uno script di shell per lanciare Emacs che fa il seguente:

sudo pkill dhclient 
sudo ifconfig em1 down 
emacs -nw -daemon 2> /dev/null 
sudo ifconfig em1 up 
sudo dhclient em1 

che disabilita networking, lancia Emacs come demone, e ri-abilita il networking. È brutto, ma funziona per ora. Se qualcun altro ha una risposta migliore, sarei felice di sentirlo. Naturalmente, em1 dovrebbe essere sostituito dal dispositivo Ethernet (probabilmente eth0, credo).

1

Ho avuto un problema di smac con emacs che richiede circa 15 secondi per l'avvio. Nel mio caso il motivo era un timeout DNS. Per qualche ragione, con il mio DNS dormitorio, una ricerca inversa fallita (host 127.0.0.1) richiede circa 10 secondi. La sostituzione del server DNS da parte del server dei nomi di google (8.8.8.8) produce una risposta quasi istantanea "non trovata: 3 (NXDOMAIN)". Allo stesso tempo, il tempo di avvio di emacs è sceso a meno di 2 secondi. Grazie a @Stefan che mi ha indirizzato verso i problemi DNS.

Modifica: aggiungendo il server dei nomi di google come ulteriore NS in Network Manager svolge anche il lavoro. (cioè quando hai risolto.conf ha la NSs in questo ordine:

nameserver a.b.c.d 
nameserver 8.8.8.8 

)