Eu sei que o emacs é frequentemente considerado um sistema operacional, mas ... s / reboot / restart /?
William Pursell
6
Eu não sou um desenvolvedor, portanto, um monte das respostas que fazem sentido imediatamente para os desenvolvedores não significa muito para mim
Yazz.com
4
@MJB, o objetivo do Stack Overflow é ser um repositório de conhecimento, mesmo para as perguntas mais básicas. Esta pergunta se encaixa perfeitamente com o objetivo do Stack Overflow. Veja stackoverflow.com/faq
haha agora, cinco anos depois, a sugerida "pesquisa no Google primeiro" leva aqui! agradável
JimLohse
Respostas:
350
Você pode usar o comando load-file ( M-xload-filee 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.
Lembre-se de que isso nem sempre faz exatamente o que você pensa que faz. Se você tiver variáveis cujo conteúdo está no flop (por exemplo, definindo um valor booleano como oposto), o comportamento não será o mesmo que carregar o arquivo.
Chollida
4
Quaisquer efeitos secundários em geral, são propensos a quebrar o comportamento desejado: o carregamento de arquivos, etc.
vemv
Quando faço isso, recebo a mensagem: load-with-code-conversion: o valor do símbolo como variável é nulo: n
Chris Marie
2
Em vez de mover o ponto para trás de um defunou defvar, você também pode deixá-lo dentro do corpo e do tipo da declaração C-M-x. Muito conveniente.
Thomas
151
Muito estranho que o muito conveniente
M-xeval-buffer
não é mencionado aqui.
Ele avalia imediatamente todo o código no buffer, é o método mais rápido, se você .emacsé idempotente.
Quem disse que .emacsé (ou tem que ser) idempotente?
Mike
@ Mike: não eu. "Dado a, b é verdadeiro" significava para mim, "se a, b é verdadeiro", mas posso entender o que você quer dizer. Eu mudo dado a if para mais clareza.
Peter
7
Mike: Quando faria sentido .emacsnão ser idempotente?
Zaz
Eu teria pensado que essa fosse a primeira sugestão.
Stryker
11
Eu não diria que é um bom estilo, mas pode acontecer. Por exemplo, você pode optar por não redefinir uma função se ela já estiver definida (desde a primeira inicialização). Você pode não ver uma alteração em sua definição ao avaliar seu arquivo init.
Kaligule
43
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.
Interessante. Eu não tinha considerado a idéia de um arquivo .emacs que não era idempotente. Algo que atente para que eu começar com elisp
Erik
2
Eu acho que é raro encontrar um arquivo .emacs que seja idempotente, pelo menos no sentido forte de duas execuções, resultando exatamente no mesmo estado de uma execução. No mínimo, é bastante comum anexar a várias listas, geralmente de maneiras que não suprimem entradas duplicadas quando executadas pela segunda vez.
Dale Hagglund
11
Outro pensamento: usando a abordagem sugerida acima, é possível que o estado do emacs que você tenha não seja o que o seu .emacs realmente faz. Ou seja, como você não executou o arquivo .emacs inteiro a partir de uma lista limpa, na verdade não sabe que ele faz o que deseja.
Dale Hagglund
11
Dito isto, não seria possível escrever .emacs de maneira idempotente? O estado global é nojento.
Ehtesh Choudhury
39
Se você tiver o seu arquivo .emacs aberto no buffer ativo no momento:
Uma coisa a ter em mente aqui é que isso pode não deixá-lo em um estado idêntico a uma abordagem de reinicialização. (Exemplo artificial: se você teve um efeito de "alternância" no seu .emacs).
Ao fazer isso, aprendi que na minha instalação do Windows 7, a pasta .emacs.d estava localizada na pasta% appdata% em vez da pasta inicial dos usuários.
é M-:> Ctrl Alt x? com base na sua lógica, imagino M-: <CMx quando apenas uma linha no arquivo init é alterada? Talvez seja apenas ==
Robert Houghton
12
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.
Com C-M-x, você não precisa estar "no final do jogo" - você está pensando C-x C-etalvez? 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.
Thomas
Eu provavelmente adquiri o hábito de terminar o cisco na época em que usava apenas o Cx Ce. Obrigado pela captura!
Bahbar
9
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 é evalapenas 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.
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:
Embora M-x eval-bufferfuncione, 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-eno 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.
A questão pergunta como fazer isso sem reiniciar o Emacs. O lançamento de uma nova cópia, embora tecnicamente responda à pergunta, não parece se encaixar no espírito da pergunta. 😄
chwarr
0
Você pode definir a ligação de teclas para emacs como este
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.
fonte
defun
oudefvar
, você também pode deixá-lo dentro do corpo e do tipo da declaraçãoC-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.fonte
.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.fonte
Se você tiver o seu arquivo .emacs aberto no buffer ativo no momento:
fonte
fonte
O seguinte deve fazê-lo ...
fonte
solução
M-:
(load user-init-file)
notas
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 elispconclusão
M-:
>M-x
fonte
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.
fonte
eval-lastsexp
, emC-x C-e
C-M-x
, você não precisa estar "no final do jogo" - você está pensandoC-x C-e
talvez? O bomC-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 / alteradosM-x eval-region
. Isso minimiza o código avaliado, minimizando efeitos colaterais não intencionais, como aponta luapyad.fonte
Atalho do teclado:
fonte
fonte
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:
fonte
Defina-o no seu arquivo init e chame pelo Mx reload-user-init-file
fonte
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 depoisM-x eval-region
. Espero que isto ajude.fonte
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.fonte
Além de comandos como Mx eval-buffer ou Mx load-file, você pode reiniciar um emacs novo na linha de comando:
Exemplo de uso stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
fonte
Você pode definir a ligação de teclas para emacs como este
Espero que isso ajude!
fonte
Se houver um shell aberto no Emacs, você também poderá:
Pode salvar alguns pressionamentos de tecla.
fonte