Eu uso o emacs em lugares diferentes e quero ter uma instalação e pacotes semelhantes instalados em todos os lugares. Eu acho que posso usar um repositório de controle de versão para os arquivos de instalação. Desde que eu uso Prelude , isso seria ~/.emacs.d/personal/
.
Eu não sei como fazer com pacotes. Existe um arquivo em algum lugar .emacs.d/
com a lista de pacotes instalados que eu posso usar para criar o emacs em outras máquinas e também instalar os listados lá?
init-file
package
version-control
El Diego Efe
fonte
fonte
Respostas:
Não há arquivo de manifesto gerado automaticamente que você possa sincronizar para obter o efeito desejado.
Dito isto, algo que você pode fazer é adicionar chamadas
package-install
na própria configuração do emacs.A idéia é que
package-install
seja idempotente; portanto, se o pacote já estiver presente, nada acontecerá. Supondo que você tenha uma chamada para cada pacote que você usa (ou pelo menos as folhas no gráfico de dependência), isso sincronizaria efetivamente seus pacotes entre máquinas.Para vários pacotes, você pode usar o seguinte:
fonte
package-install
.package.el
desde essa resposta vinculada. É possível que, no momento,package-install
executássemos operações em pacotes existentes, não apenas nos desinstalados.Eu mantenho meu diretório .emacs.d no controle de versão. Então, nos meus arquivos init.el e subsequentes, uso use-package para definir a configuração do pacote. O pacote de uso não apenas carrega preguiçosamente seus pacotes, como também os baixa por demanda se eles não existirem nos repositórios de pacotes que você configurou.
Por exemplo, eu uso o modo go, mas não em todas as máquinas. No meu init.el eu tenho o seguinte:
Isso adiciona um gancho de modo, mas mais importante, ao especificar que
:ensure t
ele fará o download do pacote sob demanda.Para manter uma máquina sincronizada, basta fazer checkout ou retirar do repositório e iniciar o Emacs. Quaisquer novos pacotes serão baixados e instalados.
fonte
:ensure go-mode
que está repetindo o nome do pacote, você pode apenas especificar:ensure t
:hook
palavra-chave para simplificar seu código.No Emacs-25, existe a variável
package-selected-packages
, então você pode personalizá-la e usá-lapackage-install-selected-packages
para garantir que estejam instaladas.fonte
O que você deseja usar é Cask , que permite criar um arquivo Cask especificando em quais pacotes instalar
cask install
. Ele pode ser usado para gerenciar dependências de um pacote e "dependências" da configuração do seu Emacs com facilidade. Coloque seu arquivo Cask sob controle de versão e instale / atualize os pacotes por máquina.fonte
Uma abordagem alternativa seria a seguinte: uma vez que eu não só deseja sincronizar meus pacotes do Emacs, mas também outros arquivos (por exemplo
.emacs
,.bashrc
mas também outros diretórios) entre o meu servidor e meu laptop, eu comecei a usarunison
, para sincronizar os arquivos e diretórios. Então, ao trabalhar no meu laptop, eu corrounison laptop
antes de qualquer outra coisa. Meu~/.unison/laptop.prf
arquivo possui a seguinte seção para arquivos relacionados ao Emacs:Como meus pacotes Emacs (e também meus backups e favoritos do Emacs) são armazenados,
~/.emacs.d
isso garante que eu tenha tudo em todas as minhas máquinas.Uma abordagem alternativa seria colocar o
.emacs.d
diretório em um diretório sincronizado com o OwnCloud, DropBox ou qualquer outro serviço de sincronização de arquivos e criar links simbólicos~/.emacs.d
para esse diretório compartilhado.fonte
Embora
package.el
seja a maneira padrão de instalar pacotes, você também pode tentar oel-get
que é muito útil para instalar pacotes que não estão (ou não podem estar) no elpa. Esta resposta lida com a sincronização desses pacotes.A maneira de garantir que os pacotes fornecidos sejam instalados ao usar o el-get é adicionar algo como o seguinte ao arquivo init
Onde pacotes são a lista de pacotes que você deseja instalar. Essa função é semelhante a
package-install
instalar os pacotes apenas se eles ainda não estiverem instalados, caso contrário, simplesmente inicializa os pacotes.fonte
Eu uso um pequeno truque "roubado" do emacs-starter-kit (eu acho):
Então, quando eu preciso de um pacote, eu simplesmente uso:
Nas startups do emacs, avaliando minha configuração,
package.el
será possível instalar o magit, se não estiver instalado.Você pode encontrar minha configuração aqui:
https://github.com/mdallastella/emacs-config/
fonte
Eu tenho o diretório ~ / emacs que é controlado pela versão mercurial e contém tudo o que minha configuração do emacs consiste (~ / emacs / site-lisp para bibliotecas baixadas manualmente, ~ / emacs / elpa para bibliotecas instaladas elpa, ~ / emacs / etc / para .emacs divididos, ~ / emacs / dot-emacs.el, que eu simbolizo como ~ / .emacs). Requeria alguns ajustes em alguns pacotes para ter todos os arquivos importantes dentro dessa árvore, mas funciona bem. Os poucos bits que são específicos da máquina foram implementados por condicionais no nome do sistema.
Então, depois de instalar / reconfigurar / alterar qualquer coisa, simplesmente confirmo puxar / enviar todas as alterações entre todas as máquinas que uso.
O benefício extra é que eu tenho um histórico completo da minha configuração e posso voltar / dividir / reverter caso algo dê errado.
O PS mercurial parece particularmente adequado, pois possui puxar / empurrar nos dois lados, mas uma configuração semelhante não deve ser difícil de alcançar com o git ou qualquer outro dvcs.
fonte
Eu tenho isso
setup-packages.el
na minha configuração do emacs, que é um híbrido de código do blog de Prelude e Tomorokoshi sobre Gerenciamento de Pacotes .setup-packages.el
faz o seguinte:elpa
pacotes, se não existir, e adicione-o e seus subdiretórios ao arquivoload-path
.package-archives
lista com Melpa.my-packages
lista instalados. Se um pacote não estiver instalado, instale-o.Como implementar
setup-packages.el
abaixo no seu~/.emacs.d/
diretório.user-emacs-directory
,setup-packages-file
emy-packages
variáveis em seuinit.el
e fazer(load setup-packages-file)
.Quando você inicia o emacs pela primeira vez em uma máquina que não possui esses pacotes instalados, todos os pacakges listados em
my-packages
serão instalados automaticamente.setup-packages.el
init.el
Você precisaria do seguinte em seu
init.el
:fonte
Para espelhar minha configuração, decidi adotar uma abordagem diferente, usando o Syncthing ; toda mudança em qualquer um dos meus arquivos de configuração se propaga para qualquer outro dos meus computadores sem precisar se preocupar com isso; portanto, quando eu atualizo os pacotes, só preciso fazer isso em um dos computadores.
fonte
RSYNC : sincronize pastas / arquivos selecionados usando
rsync
uma rede doméstica ou viassh
servidor remoto.rsync
é um utilitário de sincronização unidirecional capaz de excluir arquivos no destino. Portanto, faça backup de seus dados nos locais de origem e de destino e faça um teste completo usando a--dry-run
opção antes de fazer a coisa real.Para ler sobre como configurar corretamente o
.authinfo
arquivo, consulte https://www.gnu.org/software/emacs/manual/auth.html Um exemplo de.authinfo
conteúdo de arquivo (que pode conter várias entradas diferentes) é o seguinte:Configure e use a função
rsync-remote
para sincronizarssh
com um servidor remoto. Ou use a funçãorsync-local
para sincronizar no mesmo computador ou em uma rede doméstica confiável.fonte
https://github.com/redguardtoo/elpa-mirror cria um repositório local de todos os pacotes instalados.
O uso é simples, basta executar
M-x elpamr-create-mirror-for-installed
.Em outras máquinas, insira
(setq package-archives '(("myelpa" . "~/myelpa/")))
no seu.emacs
e reinicie o Emacs.Agora, em todas as máquinas, você obtém exatamente a mesma versão dos pacotes.
fonte