git ignoruje pliki tymczasowe vim


238

Jaki jest właściwy sposób, aby git ignorował pliki tymczasowe tworzone przez vima we wszystkich katalogach (globalnie w systemie lub lokalnie dla jednego projektu)?


6
Wzorzec *.sw?rozwiązuje standardowe, .swpale także alternatywne rozszerzenia plików wymiany .swo.
buley

7
@buley Twoja sugestia zignoruje również .swfpliki. Odradzam to, szczególnie jeśli budujesz aplikację Flash.
stephenmurdoch

1
@marflar Dobra uwaga. .Jednak ten sam wzorzec poprzedzony ukrytym plikiem powinien temu zapobiec.
buley

Dzisiaj też widziałem .swx.
Richard

2
Doświadczenie to pokazuje, że po utworzeniu 16 kopii zapasowych plików ( .tmp.swp, .tmp.swo, ..., .tmp.swa), vim tworzy .tmp.svz. Brakuje mi cierpliwości, aby zobaczyć, co nastąpi później .tmp.saa- być może .tmp.rzz? AKTUALIZACJA: Patrząc na źródło ( src/memline.c, funkcję findswapname()), poddaje się .saaz błędem: „E326: Znaleziono zbyt wiele plików wymiany”.
Keith Thompson

Odpowiedzi:


391

Pliki tymczasowe Vima kończą się na ~, więc możesz dodać do pliku .gitignorelinię

*~

Vim tworzy również pliki wymiany, które mają rozszerzenia swp i swo. aby je usunąć, użyj linii:

*.swp
*.swo

Spowoduje to zignorowanie wszystkich plików tymczasowych vim w jednym projekcie

Jeśli chcesz to zrobić globalnie, możesz utworzyć plik .gitignore w domu (możesz nadać mu inną nazwę lub lokalizację) i użyć następującego polecenia:

git config --global core.excludesfile ~/.gitignore

Następnie wystarczy dodać do tego pliku pliki, które chcesz zignorować


30
Vim utworzy kolejno pliki wymiany (.swp, .swo itp.), Więc używam .*.sw*w swoim, .gitignoreaby ukryć je wszystkie.
Drew Stephens,

32
@DrewStephens, uważam, że .*.sw?jest bardziej dokładny. (Chociaż widziałem, jak ludzie używają jakiegoś wariantu, *.sw*by podejrzewać, że brakuje mi czegoś naprawdę oczywistego ...)
Morten Siebuhr

10
@Morten Według vimdoc.sourceforge.net/htmldoc/recover.html,. *. S ?? złapałby je wszystkie na Uniksie (dekrecje .s ?? z .swp na .saa).
Max Nanasy,

6
Wystarczy rozwinąć nieco doskonały komentarz na @MatrixFrog - ponieważ to pytanie dotyczy vima, możesz znaleźć poprawny plik .gitignore w tym projekcie tutaj .
SnapShot,

17
Bądź ostrożny. github .*.s[a-w][a-z]zignoruje .svgpliki.
Jon

118

Alternatywnie możesz skonfigurować vima, aby zapisywał pliki wymiany w oddzielnej lokalizacji, np. Dodając do .vimrcpliku wiersze podobne do następujących :

set backupdir=$TEMP//
set directory=$TEMP//

Zobacz tę wskazówkę vima, aby uzyskać więcej informacji.


8
Uwaga: w Mac OS X można użyć $TMPDIRrzeczywistego tempdir :)
Alex Moore-Niemi

5
Podwójny ukośnik po preferowanym katalogu (używam ~ / tmp //) zapobiega kolizjom nazw plików poprzez przechowywanie pełnej ścieżki. W ten sposób nadal możesz edytować pliki o nazwie np. Config.xml w dwóch katalogach jednocześnie.
Brian

1
Co $TEMPznaczy
golfowe

Uwaga: Musiałem także dodać set undodir=$TEMP//, ponieważ zapisuję również trwałe pliki cofania.
Micah Lindstrom

24

Jest to coś, co powinno być wykonywane wyłącznie dla poszczególnych użytkowników, a nie dla repozytorium. Jeśli Joe używa emacsa, będzie chciał zignorować pliki kopii zapasowej emacsa, ale Betty (która używa vi) będzie chciała ignorować pliki kopii zapasowej vi (w wielu przypadkach są one podobne, ale istnieje około 24 893 popularnych edytorów i jest dość śmieszne jest próba zignorowania wszystkich różnych rozszerzeń kopii zapasowych).

Innymi słowy, nie wkładaj niczego do .gitignoreani do core.excludesśrodka $GIT_DIR/config. $HOME/.gitconfigZamiast tego wstaw informacje (jak sugeruje nunopolonia --global). Pamiętaj, że „globalny” oznacza dla użytkownika, a nie dla systemu.

Jeśli chcesz skonfigurować system dla wszystkich użytkowników (czego nie potrzebujesz), potrzebujesz innego mechanizmu. (Prawdopodobnie z ustawieniami szablonów przed zainicjowaniem repozytorium.)


3
Najwyraźniej Betty jest znacznie mądrzejsza niż Joe :-) Dobra rada i zasługuje na głos, mimo że ostatecznie skorzystałam z odpowiedzi Martinla (poprawiając go w Vimie zamiast w Git).
paxdiablo,

11

Poleciłbym również zignorować pliki takie jak:

.*.swp
.*.swo

ponieważ możesz mieć pliki, które kończą się .swp


5

Zamknij vim przed „git commit”.

aby vimużyć innych folderów do tworzenia kopii zapasowych plików ( /tmpna przykład):

set bdir-=.
set bdir+=/tmp

aby vim przestał używać bieżącego folderu dla plików .swp:

set dir-=.
set dir+=/tmp

Użycie -=, +=byłoby ogólnie dobre, ponieważ vim ma inne ustawienia domyślne dla bdir, reż , nie chcemy usuwać wszystkich. Sprawdź pomoc vima, aby uzyskać więcej informacji na temat bdir, reż :

:h bdir
:h dir

5
Uważaj, gdzie przechowujesz pliki wymiany vim. Możesz przypadkowo wyciec poświadczenia lub inne dane z edytowanego pliku: security.stackexchange.com/questions/65883/…
Mnebuerquo

5

Oto rzeczywisty kod VIM, który generuje rozszerzenia plików wymiany:

/* 
 * Change the ".swp" extension to find another file that can be used. 
 * First decrement the last char: ".swo", ".swn", etc. 
 * If that still isn't enough decrement the last but one char: ".svz" 
 * Can happen when editing many "No Name" buffers. 
 */
if (fname[n - 1] == 'a')        /* ".s?a" */
{   
    if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
    {   
        EMSG(_("E326: Too many swap files found"));
        vim_free(fname);
        fname = NULL;
        break;  
    }
    --fname[n - 2];             /* ".svz", ".suz", etc. */
    fname[n - 1] = 'z' + 1;
}
--fname[n - 1];                 /* ".swo", ".swn", etc. */

Spowoduje to wygenerowanie plików wymiany w formacie:

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

Co właściwie jest zawarte w pliku gitignore gitub dla VIM .

Jak inni słusznie zauważyli, ten .gitignore zignoruje również pliki graficzne .svg i pliki flash Adobe .swf .


3

Odkryłem, że git będzie ignorował pliki tymczasowe utworzone przez vim:

[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~

Można go również wyświetlić tutaj .


5
Zignoruje również te irytujące .swfpliki, które pojawiają się za każdym razem, gdy tworzysz aplikację flash.
stephenmurdoch

Co działa dobrze, o ile nie jesteś programistą, który musi sprawdzać pliki Flash :-)
paxdiablo

1
Zignoruje to, .svgco może stanowić problem.
Bruno Bronosky

1
Uwzględnianie jest niepotrzebne, *.un~ponieważ masz*~
Bruno Bronosky

2

pewnie,

wystarczy utworzyć „.gitignore” w katalogu domowym swojego projektu i musi on zawierać

*.swp

Otóż ​​to

jednym poleceniem

project-home-directory$ echo '*.swp' >> .gitignore

4
Myślę, echo *.swp >> .gitignoreże lepiej jest unikać zastępowania poprzedniego .gitignore.
Cesar A. Rivas

2
Nie chcesz, aby powłoka rozwijała „*”. Tak więc użyjecho '*.swp' >> .gitignore
Eddified

Nie chcesz też przypadkowo przegapić jednej z tych >postaci. Kiedyś zrobiłem to do passwdpliku, a następnie wylogowałem :-)
paxdiablo

2
# VIM: Temperory files
*~

# VIM: Swap-files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]

# VIM: Commands :cs, :ctags
tags
cscope.*

# VIM session
Session.vim

# VIM: netrw.vim: Network oriented reading, writing, browsing (eg: ftp scp) 
.netrwhist

Nazwa pliku wymiany jest zwykle taka sama jak edytowany plik, z rozszerzeniem „.swp”.

  • W Uniksie: a. jest poprzedzony zamianą nazw plików w tym samym katalogu, co edytowany plik. Pozwala to uniknąć wyświetlania pliku wymiany na liście katalogów.
  • Na komputerach z systemem MS-DOS i gdy włączona jest opcja „krótkiej nazwy”, dowolna ”. w oryginalnym pliku nazwa jest zastępowana przez „_”.
  • Jeśli ten plik już istnieje (np. Podczas odzyskiwania po awarii), wyświetlane jest ostrzeżenie i używane jest inne rozszerzenie, „.swo”, „.swn” itp.
  • Istniejący plik nigdy nie zostanie nadpisany.
  • Plik wymiany jest usuwany, gdy tylko Vim przestanie go edytować.

Zastąpienie „.” z „_” robi się, aby uniknąć problemów z systemami plików kompatybilnymi z MS-DOS (np. crossdos, multidos).

http://vimdoc.sourceforge.net/htmldoc/recover.html

http://www.vim.org/scripts/script.php?script_id=1075


0

W moim przypadku pliki tymczasowe zostały już zatwierdzone przez poprzednie działania, więc modyfikacja pliku .gitignore nie wpłynie na te git rm files_to_be_ignored --cachezatwierdzone pliki ... musisz najpierw, a następnie zatwierdzić, a następnie GOTOWE.


0

Działa to na komputerze Mac, jak zauważył Alex Moore-Niemi:

set backupdir=$TMPDIR//
set directory=$TMPDIR//

Upewnij się, że używasz, TMPDIRa nie TEMPDIR.


-4

Jeśli korzystasz z kontroli źródła. Pliki tymczasowe vim są dość bezużyteczne.
Więc możesz skonfigurować vima, aby ich nie tworzył.

Po prostu edytuj plik ~ / .vimrc i dodaj następujące wiersze:

set nobackup
set noswapfile

6
Kontrola źródła nie działa z tą samą szczegółowością co kopie zapasowe lub pliki wymiany Vima. Nawet jeśli zatwierdzasz po każdym zapisaniu (lub po określonej liczbie znaków lub sekundach - uproszczenie tego, co dają pliki wymiany Vima), nadal istnieje duże prawdopodobieństwo, że będziesz chciał edytować pliki, które nie są kontrolowane przez źródło (dla których są tworzone kopie zapasowe a pliki wymiany są nadal pożądane).
Chris Johnsen

8
Pliki tymczasowe VIM są niezwykle przydatne w przypadku awarii edytora i kilku innych powodów. Wyłączenie ich to wyrzucenie dziecka z kąpielą.
Brian Riehman

5
@Arnis Powiedz, awaria zasilania? Lub umieranie sesji X z jakiegoś powodu. Pliki tymczasowe vim są dość ważnym IMO.
jrdioko

1
Awaria @jrdioko X jest powodem, dla którego ktoś może chcieć użyć screen(lub dtachjeśli nie chce wszystkich funkcji ekranu). Awarie zasilania są obsługiwane przez UPS. Kopie zapasowe są tworzone przez {twoje ulubione oprogramowanie do tworzenia kopii zapasowych wszystkich ważnych plików}. Używam plików wymiany, aby otrzymywać powiadomienia, gdy próbuję edytować pliki, które są już edytowane, tworzenie kopii zapasowych plików, ponieważ posiadanie N + 1 miejsca z kopią zapasową nie szkodzi i cofanie plików, ponieważ trwałe cofanie jest przydatne. Tylko cofanie plików jest dla mnie trochę ważne.
ZyX

5
Lepiej jest powiedzieć vimowi, aby przechowywał pliki tymczasowe w innym miejscu niż całkowicie je wyłączyć.
Kyle
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.