Dlaczego Vim zapisuje pliki z rozszerzeniem ~?


180

Odkryłem, że podczas używania Vima na Windowsie Vim zapisuje plik, .ext.swpplik, który jest usuwany po zamknięciu okna Vima i .ext~plik.

Zakładam, że .ext.swpplik jest kopią zapasową sesji na wypadek awarii Vima. Jaki jest jednak cel tego .ext~pliku? Czy to jest trwały plik kopii zapasowej? To irytujące, ponieważ chciałbym skopiować wszystkie pliki, nad którymi pracuję, na mojego hosta bez tych duplikatów. Jak mogę to wyłączyć lub , jeśli jest tam z ważnego powodu, ukryć pliki ?


Jeśli masz otwarty jakikolwiek plik jednocześnie w więcej niż jednym miejscu, utworzą plik .ext.swp.
dirkgently

2
dirkgently: Nie, tutaj mogę otworzyć plik w jedynym oknie vima i utworzy plik .swp. Nie przejmuję się tym zbytnio, ponieważ jest usuwany, gdy zapisuję / zamykam okno.
Ross

Odpowiedzi:


221

*.ext~Jest to plik kopii zapasowej, zawierający plik, jak to było zanim go edytować.

*.ext.swpPlik jest plik wymiany, który służy jako plik blokady i zawiera historię cofania / powtarzania, jak również wszelkie inne wewnętrzne informacyjne Vima potrzeb. W przypadku awarii możesz ponownie otworzyć plik, a Vim przywróci poprzedni stan z pliku wymiany (co uważam za pomocne, więc go nie wyłączam).

Aby wyłączyć automatyczne tworzenie kopii zapasowych, użyj (w swoim vimrc):

set nobackup
set nowritebackup

Gdzie nowritebackupzmienia domyślne zachowanie "zapisywania" Vima, które jest:

  1. zapisz bufor do nowego pliku
  2. usuń oryginalny plik
  3. zmień nazwę nowego pliku

i sprawia, że ​​Vim zapisuje bufor do oryginalnego pliku (co grozi zniszczeniem go w przypadku błędu I / O). Ale zapobiegasz „przeskakiwaniu plików” na pulpit systemu Windows, co jest głównym powodem, dla którego mam to nowritebackupmiejsce.


7
+1 dla you prevent "jumping files" on the Windows desktop. Wyszukałem w Google i znalazłem tę odpowiedź
Merlyn Morgan-Graham

1
Właściwie - czy muszę mieć oba nobackupi nowritebackup? Czy istnieje sposób na zapisanie kopii pliku jako kopii zapasowej, ale nie należy tego zapisywać / usuwać / zmieniać nazwy?
Merlyn Morgan-Graham

@Merlyn: Jeśli masz backup(w przeciwieństwie do nobackup), Vim utworzy kopię zapasową ( *.ext~plik). To jest zupełnie niezwiązane z nowritebackup.
Tomalak

6
Istnieje tabela opisująca różne zachowanie między kombinacji tych przełączników: help backup-table. Okazuje się, że ustawienie ani „ nobackupnor” nowritebackup, ale zamiast tego backupcopy=yesrozwiązuje również problem „skakania”. Może to jednak zaszkodzić perf, więc każdemu z nich
Merlyn Morgan-Graham

27
Zamiast wyłączać, set backupdir=~/.vim/backup
wykonaj

224

Myślę, że lepszym rozwiązaniem jest umieszczenie tych linii w pliku vimrc

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

Pierwsza linia przeznaczona jest na pliki kopii zapasowych, druga na pliki wymiany. Podwójny ukośnik na końcu zapewnia, że ​​nie ma konfliktu w przypadku dwóch plików o tej samej nazwie, patrz komentarze (w momencie tej edycji ta opcja jest honorowana tylko dla plików wymiany, a nie dla plików kopii zapasowych ). ,.Pozwalają vimkorzystać z bieżącego katalogu, jeśli były nie istnieje.

Aby to zadziałało, musisz utworzyć katalog w swoim katalogu domowym o nazwie vimtmp. Sprawdź również, czy kopie zapasowe są włączone w konfiguracji (dodaj, set backupjeśli nie).

W ten sposób czerpiesz korzyści z obu światów, nie musisz widzieć plików, ale jeśli coś się stanie, możesz pobrać plik kopii zapasowej z vimtmp. Nie zapomnij od czasu do czasu wyczyścić katalogu.


22
+1 W rzeczywistości ustawiłem moje ustawienie na ~ / .vim / tmp, ale tak czy inaczej, niejednokrotnie uratowało mi to dupę.
JC Yamokoski

11
Dlaczego potrzebujesz,. na końcu każdego wiersza?
shin

9
@shin Vim użyje pierwszego dostępnego katalogu, więc w tym przypadku, jeśli ~ / vimtmp nie istnieje, użyje bieżącego katalogu roboczego
xixixao

3
@SalmanPK W idealnym świecie nie powinieneś edytować plików konfiguracyjnych bezpośrednio na publicznie dostępnych serwerach
Score_Under

12
Użyj dwóch ukośników na końcu ścieżki. Na przykład ustaw backupdir = ~ / .vim / .backup // - „//” na końcu katalogu oznacza, że ​​nazwy plików będą budowane na podstawie pełnej ścieżki do pliku ze wszystkimi separatorami ścieżek podstawionymi na procent „% " znak. Zapewni to niepowtarzalność nazwy pliku w katalogu zachowań.
Hacknightly

25

Aby wyłączyć te pliki, po prostu dodaj te linie do .vimrc (plik konfiguracyjny vima w systemie operacyjnym opartym na unixie):

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files

12
:set nobackup 

wyłączy kopie zapasowe. Możesz także ustawić katalog kopii zapasowej, jeśli nadal chcesz te pliki kopii zapasowych, ale w folderze centralnym. W ten sposób twój katalog roboczy nie jest zaśmiecony plikami ~.

Więcej informacji na temat kopii zapasowych znajdziesz w : Kopia zapasowa .


12

Możesz także ustawić inne rozszerzenie kopii zapasowej i miejsce, w którym chcesz ją zapisać (wolę ~/.vimbackupsna Linuksie). Kiedyś używałem "wersjonowanych" kopii zapasowych, poprzez:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

To ustawia dynamiczne rozszerzenie kopii zapasowej ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).


3
możesz chcieć dołączyć, jak skonfigurować katalog zapasowy, tj. umieścić set backupdir=~/.vimbackupsswój ~ / .vimrc
rampion

1
Pomoc vim w pełni opisuje tę technikę. Zobacz:help backupext
netjeff

8

Umieść tę linię w swoim vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


W to byłby:

C:\Program Files (x86)\vim\_vimrc

plik do konfiguracji Vima dla całego systemu dla wszystkich użytkowników.

Ustawienie tego ostatniego noundofilejest ważne w systemie Windows, aby zapobiec tworzeniu *~plików tyldy po edycji.


Chciałbym, żeby Vim miał domyślnie dołączoną tę linię. Nikt nie lubi brzydkich katalogów.

Pozwól użytkownikowi wybrać, czy i jak chce najpierw włączyć zaawansowane funkcje tworzenia kopii zapasowych / cofania plików.

To najbardziej irytująca część Vima.

Następnym krokiem może być konfiguracja:

set noeb vb t_vb= " errorbells visualbell

aby wyłączyć sygnał dźwiękowy także :-)


Dziękuję bardzo za to! „noundofile” był opcją, która w końcu pozbyła się tego okropnego miotu. (I zgadzam się w 100% ze wszystkim innym, co napisałeś w swoim poście!)
pwmusic

6

Masz rację, że .swpplik jest używany przez vim do blokowania i jako plik odzyskiwania.

Spróbuj set nobackupwstawić swój vimrc, jeśli nie chcesz tych plików. Zobacz dokumentację Vima, aby uzyskać informacje o różnych opcjach związanych z kopiami zapasowymi, jeśli chcesz mieć całą miarkę lub zamiast tego chcesz mieć pliki .bak ...


+1 za wspomnienie o celu jako pliku blokady. Nie myślałem o tym.
Tomalak

5

Jedyną opcją, która działała dla mnie, było umieszczenie tej linii w moim pliku ~ / .vimrc

set noundofile

Inne opcje dotyczące plików kopii zapasowych nie zapobiegły tworzeniu plików tymczasowych kończących się na ~ (tylda)


To w końcu zadziałało. Dlaczego nie wspomniano o tym w innych odpowiedziach? Spowoduje to usunięcie: .<filename>.un~plików, podczas gdy inne opcje usuwają tylko <filename>~pliki.
JLT

0

Musiałem dodać set noundofiledo ~ _gvimrc

Katalog „~” można zidentyfikować, zmieniając katalog za pomocą cd ~polecenia

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.