Jestem nowy w świecie Vima i chcę to zrobić, aby za każdym razem, gdy zapisywałem plik, był on odpowiedzialny za kontrolę wersji. czy to możliwe?
11
Możesz użyć komend Vima:
:autocmd BufWritePost * execute '!git add % && git commit -m %'
To nie zostało przetestowane, ale powinno dodać plik i zatwierdzić go z nazwą pliku jako komunikat zatwierdzenia.
Chcesz BufWritePost, ponieważ jest on uruchamiany po zapisaniu pliku. Wyobrażam sobie jednak, że istnieje wiele uciążliwych lub niebezpiecznych skrzynek.
Korzystam z automatycznego polecenia vim, które umieszczam w moim .vimrc. Komenda najpierw wykonuje ogólne sprawdzenie, czy pracujemy w katalogu git (sprawdzając istnienie katalogu .git, w bieżącym katalogu lub za pomocą git rev-parse
), a następnie używa git -a -m %
, aby tylko pliki, które zostały wcześniej dodane, były przemieszczane i zatwierdzane .
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'
, ze odpowiedź SOMożesz zajrzeć do zbiegającej się wtyczki, jest to bardzo potężna wtyczka git dla vima. Możesz również skonfigurować sugestie
autocmd
asdonothingsuccessfully
, ale pop-up wyskakuje:Gcommit
lub:Gstatus
(z którego możesz cherry wybrać zmiany, aby dodać do indeksu git)źródło
Opierając się na odpowiedziach udzielonych przez innych:
To jest całkowicie przejrzyste. Nie dostaniesz komunikatu „Naciśnij Enter, aby kontynuować” (ale jeśli zatwierdzenie nie zadziałało, nie będziesz wiedział, że nie powiodło się).
źródło
Z pewnością można to zrobić za pomocą makra lub z mapowaniem poleceń.
(Sprawdź /programming/117150/can-i-re-map-commands-in-vim )
Nie jestem jednak pewien, czy to dobra opcja. Na razie nie jestem biegły w git i wiem, że czasem różni się od svn. Ale nie zrobiłbym tego automatycznego zatwierdzania za pomocą svn. Zaangażowanie musi mieć sens, a nie oszczędzać w zwykłym czasie.
Zwykle zatwierdzasz, ponieważ dodałeś funkcję, naprawiłeś błąd, ... nie tylko dlatego, że pracowałeś nad plikiem. Nie skończysz z niekompilującym się projektem lub niedokończoną funkcją.
źródło
Wiem, że to pytanie jest stare i jest to rażąca autopromocja, ale napisałem wtyczkę Vima, która uruchomi niektóre skrypty powłoki, które będą uruchamiane po określonych
autocmd
zdarzeniach Vima . Na przykład skrypt o nazwie.bufwritepost.vimhook.sh
będzie uruchamiany (synchronicznie) przy każdym uruchomieniuBufWritePost
polecenia. Następnie możesz łatwo dołączyć dowolną logikę do wykonania polecenia git commit w tym skrypcie. Wtyczka zakłada określone konwencje nazewnictwa tych skryptów, a także obsługuje skrypty przechwytujące, które uruchamiają się tylko w plikach o określonych nazwach lub o określonych rozszerzeniach.Pełne szczegóły: https://github.com/ahw/vim-hooks
źródło
Chcę zgłosić swoje podejście do tego problemu.
Mam
vimrc.vim
repozytorium git ($VIMCONF
z bootstrap .vimrc) i zmapowane<Leader>ve
(„edycja vim”), aby otworzyć vimrc w nowej karcie. Nie wpływa to na bieżący katalog roboczy.Więc jeśli edytuję
vimrc.vim
z vima uruchomionego w innym katalogu poza moim repozytorium git vim, podejście omówione przez Nicka Edwardsa zakończy się niepowodzeniem. Mój hack jest następujący (dla Windows i Linux)Wyjaśnienie:
git
musi być w ścieżce (czyli powinny być w stanie wpisaćgit <ENTER>
wcmd.exe
)tempdir
Uwagi:
|
. Łańcuch przerwie działanie, jeśli któreś z poleceń się nie powiedzie. Aby przełamać kilka linii, rozpocznij kolejną linię za pomocą\
.*.vim
iexpand($VIMCONF)."/ftplugin/"
źródło