GitHub para .vimrc y complementos

21

Sé que muchas personas almacenan su .vimrc en GitHub para facilitar el trabajo en máquinas nuevas, y eso tiene mucho sentido para mí. Sin embargo, incluir complementos es problemático, porque los complementos que uso ya son repositorios de git. ¿Cómo se puede crear un repositorio que rastree tanto su .vimrc como los complementos que se puedan instalar?

Tom
fuente
Siento que esto podría estar demasiado orientado a la opinión; no hay un "mejor" objetivo y hay muchas buenas opciones, cada una con sus propios pros y contras. Además, el bit específicamente sobre repositorios anidados lleva la pregunta más a la categoría "usar git" y menos a vim. ¿Tal vez si se centró en un problema específico que tenía con vim o vim plugins al intentar almacenar su configuración en github?
3
Puedo editarlo para sacar lo mejor si quieres; mi intención era preguntar más de "¿cómo hago esto?" pregunta, aunque reconozco que la forma en que estaba pensando sobre el problema podría no ser la ideal.
Tom
Eso puede ayudar, pero eso puede convertirlo en una pregunta de "lista de cosas" (de nuevo, hay muchas maneras diferentes de hacer esto de manera efectiva). Actualmente hay un tema sobre meta sobre tales preguntas si desea contribuir a la discusión sobre cómo debemos tratar este tipo de preguntas.
2
Editado Espero haber dejado más claro que estoy preguntando "¿cómo hago esto?"
Tom
1
Simplemente use un administrador de complementos como neobundle.
Philip

Respuestas:

18

Cómo tratar con repositorios dentro de repositorios ha sido una pregunta continua con git. Los submódulos de Git son una forma de abordar la situación, a expensas de agregar un poco más de complejidad para realizar un seguimiento. El sitio git tiene una introducción a los submódulos .

La idea básica es mantener una referencia a otro repositorio git asociado con una ruta en su repositorio. Estas referencias se almacenan en un archivo .gitmodulesen la raíz de su repositorio (que es administrado por git, así que déjelo en paz). Parte de la complejidad entra en juego al clonar un repositorio que tiene submódulos: debe git submodule initcrear explícitamente el .gitmodulesarchivo y luego git submodule updateclonar los submódulos.


Aquí hay un tutorial sobre cómo agregaré un nuevo complemento vim a mi repositorio de archivos de puntos (me he ~/.vim/alias a este repositorio .vim/) usando un submódulo:

$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir

Después de esto submodule add, a git statusmostrará que ha modificado (o creado) el .gitmodulesarchivo, con algo como esto:

[submodule ".vim/bundle/vim-elixir"]
    path = .vim/bundle/vim-elixir
    url = https://github.com/elixir-lang/vim-elixir.git

También debería mostrarse .vim/bundle/vim-elixircomo un nuevo archivo. Git trata esa ruta especialmente ahora: es un directorio normal en su sistema de archivos (por lo que vim lo carga normalmente), pero git difflo tratará como una confirmación específica de su repositorio. Al mirar diffs o registros para esa ruta (por ejemplo git log -1 -u .vim/bundle/vim-elixir), git lo mostrará como una cadena de una línea como esta:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

La actualización a la versión más reciente de los plugins corresponde a entrar en el repositorio del submódulo y la salida a una nueva confirmación, y luego cometer que a su repositorio:

$ cd .vim/bundle/vim-elixir
$ git remote -v            # note: the submodule repo's origin, not my repo's
origin  https://github.com/elixir-lang/vim-elixir.git (fetch)
origin  https://github.com/elixir-lang/vim-elixir.git (push)

$ git pull
# ...

$ cd -     # back to my repository's root
$ git status
# ...
    modified:   .vim/bundle/vim-elixir (new commits)

$ git diff .vim/bundle/vim-elixir
# ...
-Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
+Subproject commit d59784e7afbd0d55c501e40c43b57cbe6f6e04c2

$ git commit -m "update vim-elixir" .vim/bundle/vim-elixir
alxndr
fuente
Gracias, ¡parece el tipo de cosas que estaba buscando!
Tom
Ah, no noté que tu respuesta había sido publicada, ya que estaba editando la mía por algún tiempo.
muru
23

No necesita almacenar complementos en su VCS; También puede usar un administrador de paquetes Vim. Desde ayer, uso vim-plug :

Puede definir complementos en su vimrc así:

call plug#begin('~/.vim/plugged')

Plug 'embear/vim-localvimrc'
Plug 'kchmck/vim-coffee-script'
" ... etc

call plug#end()

Luego reinicie Vim y luego instale complementos con:

:PlugInstall

O bien, puede agregar este fragmento de las preguntas frecuentes a su archivo vimrc antes de la plug#begin()llamada:

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall
endif

Esto colocará los complementos ~/.vim/plugged. No necesita mantener este archivo en su VCS . Si desea usar este vimrc en otra máquina, solo llame :PlugInstalla esa máquina.

para eliminar un complemento, elimínelo del archivo vimrc y ejecute:

:PlugClean

Tenga en cuenta que vim-plug no admite la instalación de scripts desde el sitio web de scripts de Vim, pero esos scripts se reflejan en GitHub , por lo que no hay necesidad de hacerlo.

También hay algunas ventajas adicionales, como la actualización más fácil del complemento y la carga a pedido para un mejor rendimiento. Tampoco corre el riesgo de violar los términos de licencia de los complementos que está distribuyendo con sus archivos vimrc.

Ver también:

Martin Tournoij
fuente
5

Guardo mi vimrc en github y los complementos como submódulos de mi repositorio.

En el archivo readme.md pongo un forro que extrae el repositorio y luego ejecuta el script de configuración, de esta manera puedo copiar una línea en un editor y configura todo. Hace un poco más que solo vim (pero no mucho).

https://github.com/Loki-Astari/UnixConfig

Para usarlo:

cd
git clone [email protected]:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd

PD. Dispuesto a tomar cualquier consejo (como lo hice hace años y no lo he tocado desde entonces).

Nota: Mi parte favorita es que también configura git y lo configura para usar vim como la herramienta diff para git. Vimdiff es la mejor herramienta de diferencias.

Martin York
fuente
5

Si desea seguir con Pathogen, una forma podría ser usar submódulos Git . Cuando agrega un submódulo, git lo reconoce como de otro repositorio y deja solo su contenido (a menos que se haya cambiado, en cuyo caso, se mostrará como contenido no rastreado cuando lo haga git status). Si tiene todos sus complementos basados ​​en Github bundle/, entonces agregarlos como submódulos es una tarea bastante simple con un buen shell:

for f in bundle/*/ 
do 
    git submodule add $(awk '/url =/{print $3}' "$f/.git/config") "$f"
done

Puede echar un vistazo a cómo se muestran los submódulos en mi repositorio vimrc .


Si agrega un archivo a un submódulo o realiza algunos cambios que no afectan el repositorio, git statusseguirá quejándose de que el submódulo tiene cambios no confirmados o archivos no rastreados. Puede hacer que git ignore dichos cambios agregando ignore = dirtya la configuración del submódulo en el .gitmodulesarchivo. Por ejemplo:

[submodule "bundle/LaTeX-Box"]
    path = bundle/syntastic
    url = https://github.com/scrooloose/syntastic.git
    ignore = dirty

Un beneficio de los submódulos es que la revisión del submódulo se agrega al repositorio git, de modo que git initautomáticamente se encarga de verificar esa revisión en particular. Puede tirar eso y decirle a git que ignore los submódulos una vez que los haya agregado al agregarlos ignore = alla su configuración en el .gitmodulesarchivo. Por ejemplo:

[submodule "bundle/LaTeX-Box"]
    path = bundle/LaTeX-Box
    url = https://github.com/LaTeX-Box-Team/LaTeX-Box.git
    ignore = all

Por último, ¡un comando para actualizarlos a todos!

git submodule foreach git pull

Palabra de advertencia: soy nuevo en submódulos. No estoy realmente seguro de cómo se comportan.

muru
fuente
vim-pandemic es otra forma de mejorar el patógeno sin necesidad de utilizar submódulos. Pandemic maneja los repositorios remotos dejando a Pathogen para manejar el runtimepath. Esto significa que uno necesita dos herramientas, pero para tareas dispares que "deberían" manejarse por separado.
jalanb
¿Alguien puede comentar por qué tpope en el archivo Léame de patógenos podría decir por qué los submódulos no son el camino a seguir? Tampoco conozco submódulos (y mi solución funciona muy bien para mí sin siquiera un administrador de complementos), pero supongo que la multitud anti-submódulos tiene algo interesante que decir.
dash-tom-bang
1
@ dash-tom-bang No leo tanto como él diciendo que no debes usar submódulos. Creo que solo dice que no es su método preferido.
Rico
1
TBH después de un par de años de usarlos, me molesté con los submódulos. Ahora recomendaría no usarlos. Ahora uso vim-plug y solo me ha facilitado la vida.
muru
4

Puede agregar esta línea a su .gitignorepara ignorar todos sus complementos y no confirmarlos:

vim/bundle

Además, dijiste que es problemático que incluya el código del complemento porque ya son repositorios de github. Supongo que quiere decir que no desea duplicar el código, pero he oído decir que debe continuar y duplicar el código que es una dependencia para que siempre pueda volver a un punto en particular en su código y saber que funcionará. Aquí hay algunos artículos de James Shore que hablan de eso: http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . Él está hablando de código de programación y npm (a diferencia de vim), pero creo que el argumento aún se aplica, desea un entorno confiable para codificar o escribir.

aharris88
fuente
1
"Puede agregar esta línea a su .vimrc ..." ¿quiso decir .gitignore?