Como faço para o Emacs recarregar todas as minhas definições atualizadas .emacs
sem reiniciar o Emacs?
Como faço para o Emacs recarregar todas as minhas definições atualizadas .emacs
sem reiniciar o Emacs?
Respostas:
Você pode usar o comando load-file ( M-x load-file
e pressione return duas vezes para aceitar o nome do arquivo padrão, que é o arquivo atual sendo editado).
Você também pode simplesmente mover o ponto para o final de qualquer sexp e pressionar C-xC-epara executar apenas esse sexp. Normalmente, não é necessário recarregar o arquivo inteiro se você estiver apenas alterando uma linha ou duas.
defun
ou defvar
, você também pode deixá-lo dentro do corpo e do tipo da declaração C-M-x
. Muito conveniente.
Muito estranho que o muito conveniente
M-x eval-buffer
não é mencionado aqui.
Ele avalia imediatamente todo o código no buffer, é o método mais rápido, se você .emacs
é idempotente.
.emacs
é (ou tem que ser) idempotente?
.emacs
não ser idempotente?
Geralmente, você pode apenas reavaliar a região alterada. Marque a região ~ / .emacs que você alterou e use M-x eval-region RET
. Isso geralmente é mais seguro do que reavaliar o arquivo inteiro, pois é fácil gravar um arquivo .emacs que não funciona exatamente após o carregamento duas vezes.
Se você tiver o seu arquivo .emacs aberto no buffer ativo no momento:
Mx eval-buffer
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
prompt (incluindo os parênteses)user-init-file
é uma variável que mantém o ~/.emacs
valor (apontando para o caminho do arquivo de configuração) por padrão(load)
é uma versão mais curta, antiga e não interativa do (load-file)
; não é um comando emacs (a ser digitado M-x), mas uma mera função elispM-:
> M-x
Outros já responderam à sua pergunta como indicado, mas acho que geralmente quero executar as linhas que acabei de escrever. por isso, CtrlAltxno lisp funciona muito bem.
eval-lastsexp
, emC-x C-e
C-M-x
, você não precisa estar "no final do jogo" - você está pensando C-x C-e
talvez? O bom C-M-x
é que você pode invocá-lo mesmo quando point estiver no meio de uma declaração de função / variável.
Sugiro que você não faça isso, inicialmente. Em vez disso, inicie uma nova sessão do emacs e teste as alterações que você fez para ver se elas funcionam corretamente. O motivo para fazer isso dessa maneira é evitar deixá-lo em um estado em que você tem um arquivo .emacs inoperável, que falha ao carregar ou falha ao carregar de maneira limpa. Se você fizer toda a edição na sessão original e todos os testes em uma nova sessão, sempre terá algo confiável para comentar o código incorreto.
Quando finalmente estiver satisfeito com as alterações, vá em frente e use uma das outras respostas para recarregar. Minha preferência pessoal é eval
apenas a seção que você adicionou / alterou e, para isso, basta destacar a região do código e da chamada adicionados / alterados M-x eval-region
. Isso minimiza o código avaliado, minimizando efeitos colaterais não intencionais, como aponta luapyad.
Atalho do teclado:
(defun reload-init-file ()
(interactive)
(load-file user-init-file))
(global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file
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
Atualmente, estou no Ubuntu 15.04; Eu gosto de definir uma chave para isso.
[M-insert] se traduz em alt-insert no meu teclado.
Coloque isso no seu arquivo .emacs:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
Defina-o no seu arquivo init e chame pelo Mx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Embora M-x eval-buffer
funcione, você pode ter problemas com alternâncias e outras coisas semelhantes. Uma abordagem melhor pode ser "marcar" ou destacar o que há de novo no seu .emacs (ou mesmo no buffer de arranhões, se você estiver apenas brincando) e depois M-x eval-region
. Espero que isto ajude.
Aqui está uma maneira rápida e fácil de testar rapidamente sua configuração. Você também pode usar C-x C-e
no final do lisp específico para executar determinadas funções individualmente.
O Cx Ce executa o comando eval-last-sexp (encontrado no mapa global), que é uma função interativa do Lisp compilada.
É vinculado a Cx Ce.
(eval-last-sexp EVAL-ÚLTIMO-SEXP-ARG-INTERNO)
Avalie sexp antes do ponto; valor de impressão na área de eco. Interativamente, com o argumento prefix, imprima a saída no buffer atual.
Normalmente, essa função trunca a saída longa de acordo com o valor das variáveis 'eval-expression-print-length' e 'eval-expression-print-level'. Com um argumento de prefixo zero, no entanto, não existe esse truncamento. Esse argumento de prefixo também faz com que números inteiros sejam impressos em vários formatos adicionais (octal, hexadecimal e caractere).
Se 'eval-expression-debug-on-error' for nulo, que é o padrão, esse comando organizará todos os erros para inserir o depurador.
Além de comandos como Mx eval-buffer ou Mx load-file, você pode reiniciar um emacs novo na linha de comando:
emacs -q --load "init.el"
Exemplo de uso stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
Você pode definir a ligação de teclas para emacs como este
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
Espero que isso ajude!