Soy nuevo en el mundo de Vim, y quiero hacerlo para que cada vez que guarde un archivo esté comprometido con el control de versiones. es posible?
11
Podrías usar los comandos automáticos de Vim:
:autocmd BufWritePost * execute '!git add % && git commit -m %'
Eso no se ha probado, pero debe agregar el archivo y confirmarlo con el nombre del archivo como mensaje de confirmación.
Desea BufWritePost ya que esto se activa después de que se escribe el archivo. Sin embargo, me imagino que hay muchos casos extremos molestos o inseguros.
Uso un comando automático vim que coloco en mi .vimrc. El comando primero hace una verificación cruda de que estamos trabajando en un directorio git (verificando la existencia de un directorio .git, ya sea en el directorio actual o usando git rev-parse
), luego lo usa git -a -m %
para que solo los archivos que se hayan agregado previamente se preparen y confirmen .
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
, a partir de una respuesta SOEs posible que desee ver el complemento fugitivo , es un complemento git muy poderoso para vim. También puede configurar un
autocmd
comodonothingsuccessfully
sugiere, pero hacer que aparezca:Gcommit
o:Gstatus
(desde el cual puede elegir los cambios para agregar al índice git)fuente
Sobre la base de las respuestas que otros han proporcionado:
Esto es completamente transparente. No recibirá el mensaje "Presione enter para continuar" (pero si el commit no funcionó, no sabrá que falló).
fuente
Seguramente podría hacerlo con una macro o con la reasignación de comandos.
(Consulte /programming/117150/can-i-re-map-commands-in-vim )
Sin embargo, no estoy seguro de que sea una buena opción. No soy competente en git por ahora y sé que a veces es diferente de svn. Pero no haría este auto-commit con svn. Comprometerse debe ser significativo y no ahorrar en el tiempo regular.
Normalmente se compromete porque agregó una función, corrigió un error, ... no solo porque trabajó en un archivo. No terminará con un proyecto sin compilar o una función sin terminar.
fuente
Sé que esta pregunta es antigua y esta es una autopromoción descarada, pero escribí un complemento de Vim que activará ciertos scripts de shell que se ejecutarán después de
autocmd
eventos específicos de Vim . Por ejemplo, una secuencia de comandos llamada.bufwritepost.vimhook.sh
se ejecutará (sincrónicamente) cada vez queBufWritePost
se active el comando. Luego, podría incluir fácilmente cualquier lógica que desee para realizar el git commit dentro de ese script. El complemento asume convenciones de nomenclatura específicas de estos scripts y también admite scripts "enganchados" que se activan solo en archivos que coinciden con ciertos nombres o que tienen ciertas extensiones.Detalles completos: https://github.com/ahw/vim-hooks
fuente
Quiero informar mi opinión sobre este problema.
Tengo el
vimrc.vim
repositorio en un git ($VIMCONF
, con un bootstrap .vimrc) y mapeado<Leader>ve
("vim edit") para abrir el vimrc en una nueva pestaña. Esto no afecta el directorio de trabajo actual.Entonces, si edito
vimrc.vim
desde un vim iniciado en un directorio diferente fuera de mi repositorio vim git, el enfoque que fue discutido por Nick Edwards fallará. Mi truco es el siguiente (para Windows y Linux)Explicación:
git
tiene que estar en el camino (es decir, usted debería ser capaz de escribirgit <ENTER>
encmd.exe
)tempdir
Notas:
|
. La cadena abortará si alguno de los comandos falla. Para dividir varias líneas, comience la siguiente línea con\
.*.vim
yexpand($VIMCONF)."/ftplugin/"
fuente