Podczas edycji kodu źródłowego przy użyciu gvim (v.7.4.488), chcę wprowadzić pewne zmiany w vcs (używam git 2.1.4 z wiersza poleceń w systemie Ubuntu Linux).
git --status
pokazuje, które pliki zmieniłem. Pokazuje jednak także vim .*.swp
aktualnie widocznych buforów (zarówno jeśli plik zawiera niezapisane zmiany, jak i gdy edytowany plik jest taki sam jak .*.swp
plik -file). Oczywiście git może zignorować te pliki lub vim może przechowywać pliki wymiany w innej lokalizacji (patrz vim.wikia lub to pytanie w Stackoverflow ). Ale podoba mi się, że .*.swp
pliki-wyświetlają się, git --status
gdy zawierają niezapisane zmiany, ponieważ sygnalizuje mi, że zatwierdzam pliki w innym stanie niż to, co myślę.
W jaki sposób można uniknąć fałszywych alarmów o .*.swp
-files ukazujących się git --status
gdy zapisany plik jest taka sama jak .*.swp
-file, będąc w stanie zobaczyć, że plik do popełniania są w innym stanie niż te, które mam do edycji z vim?
- Czy można mieć tylko
.*.swp
-files, gdy plik na dysku i plik w vimie są różne? - Czy istnieje inny sposób wykrywania niezapisanych plików?
Połączenie komentarzy @elyashiv i @VanLaser daje prostszą metodę niż wykrywanie, czy pliki wymiany oznaczają niezapisane pliki:
- nie pozwól gitowi ignorować plików. *. sw [po];
- podczas zatwierdzania, jeśli
git --status
ujawnia jakiekolwiek.*.sw[po]
-file, robi:wa
in in vi; i, - dodaj i zatwierdź.
:wa
aby upewnić się, że nie ma żadnych niezapisanych plików.git commit
...Odpowiedzi:
vim -r
w wierszu polecenia wyświetli się lista wszystkich plików wymiany w bieżącym katalogu i katalogach tymczasowych oraz informacja, czy zawierają one niezapisane zmiany. Poszukaj linii, która mówimodified: no/YES
.Nie wiem, jak powiedzieć Vimowi, aby szukał w innym katalogu, więc musisz przejść do każdego katalogu zawierającego plik wymiany i uruchomić
vim -r
. Możesz wymyślić skrypt, który przeanalizuje dane wyjściowegit status
lub użyje gofind -name '.*.sw[po]'
, a następnie uruchomivim -r
w każdym katalogu, aby wyświetlić wszystkie pliki wymiany z niezapisanymi zmianami.(Używam
.*.sw[po]
zamiast.*.swp
, ponieważ czasami.swo
pliki są tworzone oprócz.swp
plików, gdy edytujesz plik, który już ma plik wymiany..swn
Pliki można również utworzyć, jeśli edytujesz plik z dwoma istniejącymi plikami wymiany, ale nie sądzę Widziałem kiedyś jednego na wolności. Jeśli jesteś naprawdę paranoikiem, możesz go użyć.*.sw[a-p]
lub po prostu.*.sw?
.)Zobacz
:help -r
(trochę) więcej informacji na temat-r
opcji lub:help recover.txt
więcej informacji na temat nazw plików odzyskiwania i wymiany.źródło
.
w nazwie pliku), więc właściwym wzorem byłby.*.sw[a-p]
(chociaż w przypadkach patologicznych można faktycznie dostać się do samego końca.foo.saa
). To powinno również wykluczać dopasowanie plików Flash, ponieważ wątpię, aby były to zwykle pliki ukryte..
jest wymagane w globu powłoki, ale*.swp
działa jako argument dlafind
. Ale prowadzenie.
ułatwia sprawy. Dzięki!Tak. Poniższy fragment kodu (zaadaptowany z vimrc tpope ) wyłączy plik wymiany dla bufora, gdy nie jest modyfikowany, więc pliki wymiany istnieją tylko dla zmodyfikowanych plików.
Zastrzeżenie : Ponieważ plik wymiany istnieje tylko wtedy, gdy bufor jest modyfikowany, tracisz użycie pliku wymiany jako blokady doradczej. Jeśli bufor nie jest zmodyfikowany, inny Vim może rozpocząć jego edycję bez powiadomienia, że jest już otwarty. Jeśli drugi Vim zapisze, zanim pierwszy wprowadzi więcej zmian, nie zostaną zauważeni, dopóki użytkownik nie spróbuje zapisać lub coś sprawi, że Vim sprawdzi, czy plik jest zmodyfikowany.
źródło