Я новичок в мире Vim и хочу сделать так, чтобы каждый раз, когда я сохранял файл, он передавался на контроль версий. Это возможно?
11
Вы можете использовать автокоманды Vim:
:autocmd BufWritePost * execute '!git add % && git commit -m %'
Это не проверено, но он должен добавить файл и зафиксировать его с именем файла как сообщение о коммите.
Вы хотите BufWritePost, так как это срабатывает после записи файла. Я думаю, что есть много утомительных или небезопасных крайних случаев.
Я использую автокоманду vim, которую я помещаю в свой .vimrc. Команда сначала выполняет грубую проверку того, что мы работаем в каталоге git (проверяя наличие каталога .git, либо в текущем каталоге, либо используя git rev-parse
), затем использует, git -a -m %
чтобы только файлы, которые были ранее добавлены, были помещены в очередь и зафиксированы. ,
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'
из SO ответаВозможно, вы захотите заглянуть в беглый плагин, это очень мощный плагин для git для vim. Вы также можете настроить
autocmd
какdonothingsuccessfully
предложено, но у него есть всплывающее окно:Gcommit
или:Gstatus
(из которого вы можете выбрать изменения для добавления в индекс git)источник
Опираясь на ответы, предоставленные другими:
Это абсолютно прозрачно. Вы не получите сообщение «Нажмите Enter для продолжения» (но если фиксация не сработала, вы не узнаете, что она не удалась).
источник
Вы наверняка могли бы с этим макрос или с переназначением команды.
(Проверьте /programming/117150/can-i-re-map-commands-in-vim )
Я не уверен, что это хороший вариант. Я не очень хорошо разбираюсь в git и знаю, что иногда он отличается от svn. Но я бы не делал эту авто-фиксацию с SVN. Фиксация должна быть значимой, а не сохранять в обычное время.
Обычно вы делаете коммит, потому что вы добавили функцию, исправили ошибку, а не только потому, что вы работали с файлом. У вас не будет некомпилируемого проекта или незавершенной функции.
источник
Я знаю, что этот вопрос старый и это явное самореклама, но я написал плагин Vim, который будет запускать определенные сценарии оболочки после определенных
autocmd
событий Vim . Например, названный скрипт.bufwritepost.vimhook.sh
будет запускаться (синхронно) каждый раз при запускеBufWritePost
команды. После этого вы можете легко включить любую логику для выполнения коммита git внутри этого скрипта. Плагин принимает определенные соглашения об именах этих сценариев, а также поддерживает сценарии «ловушки», которые запускаются только для файлов, соответствующих определенным именам или имеющих определенные расширения.Полная информация: https://github.com/ahw/vim-hooks
источник
Я хочу сообщить о своем взгляде на эту проблему.
У меня есть
vimrc.vim
в репозитории git ($VIMCONF
с начальной загрузкой .vimrc) и отображается<Leader>ve
("vim edit"), чтобы открыть vimrc в новой вкладке. Это не влияет на текущий рабочий каталог.Так что, если я редактирую
vimrc.vim
из vim, запущенного в другом каталоге за пределами моего хранилища vim git, подход, который обсуждал Ник Эдвардс, потерпит неудачу. Мой взлом заключается в следующем (для Windows и Linux)Объяснение:
git
должен находиться в пути (вы должны быть в состоянии напечататьgit <ENTER>
вcmd.exe
)tempdir
Ноты:
|
. Цепочка будет прервана, если какая-либо из команд не будет выполнена. Чтобы разбить несколько строк, начните следующую строку с\
.*.vim
иexpand($VIMCONF)."/ftplugin/"
источник