Jak uniemożliwić Vimowi tworzenie (i pozostawianie) plików tymczasowych?

163

Dlaczego vim tworzy <filename>~ pliki? Czy jest sposób, aby to wyłączyć?

Jeśli jest to kopia zapasowa (lub coś w tym rodzaju), używam do tego git.

Te .<filename.with.path.hints>.swppliki też.

Jak mam powiedzieć vimowi, żeby ich nie tworzył, a przynajmniej czyścił po sobie?

EDYTOWAĆ

ups, duplikat:

Dlaczego Vim zapisuje pliki z rozszerzeniem ~?

I przyjął odpowiedź rogeriopvl męska stamtąd.

kopia dosłowna:

set nobackup       "no backup files
set nowritebackup  "only in case you don't want a backup file while editing
set noswapfile     "no swap files
hasen
źródło
13
Git nigdy nie pomoże Ci odzyskać pracy po awarii systemu. Git może również ignorować Twoje pliki * .swp. = D
vmassuchetto
3
Możliwy duplikat Dlaczego Vim zapisuje pliki z rozszerzeniem ~?
törzsmókus
lol, czy ktoś poważnie oznaczył to pytanie jako zduplikowane po sześciu latach publikowania go?
hasen

Odpowiedzi:

79

Zdecydowanie zalecam kontynuowanie pracy z plikami wymiany (na wypadek awarii Vima).

Możesz ustawić katalog, w którym przechowywane są pliki wymiany, aby nie zaśmiecały twoich normalnych katalogów:

set swapfile
set dir=~/tmp

Zobacz też

:help swap-file
user55400
źródło
4
cóż, nigdy nie potrzebowałem tych z notatnikiem ++, chyba że powiesz, że vim będzie się zawieszał zbyt często!
hasen
8
nie, nie sugerowałem, że vim ulega awarii zbyt często (chociaż widziałem, jak się zawieszał). Ale w moim środowisku pracy połączenie sieciowe z jakimś hostem, nad którym pracuję, jest dość niestabilne, więc następuje przerwana edycja. Pomagają w tym pliki wymiany.
user55400
9
@ user55400 słyszałeś o GNU / Screen? (lub tmux, lub ta japońska alternatywa)
Elazar Leibovich
Dodałem to do mojego pliku _vimrc w systemie Windows i nadal otrzymuję plik ~ pliki. Czy nie robię czegoś poprawnie?
FilBot3
2
@noircc Odradzałbym używanie / tmp. W przypadku awarii całego systemu i konieczności ponownego uruchomienia, Twoje pliki wymiany znikną.
57

Umieść to w swoim pliku konfiguracyjnym .vimrc.

set nobackup
Chad Birch
źródło
5
Zrobiliśmy to na Windows 8.1 z Vimem. Pliki wymiany są nadal obecne.
Shaun Luttin
1
Shaun, być może będziesz musiał dodać "set noswapfile" do twojego .vimrc, aby zapobiec tworzeniu nowych plików wymiany, jak wspomniano w edycji oryginalnego pytania.
Earl Zedd
A co z :posiedzeniem jako prefiksem przed setsłowem kluczowym? Czy to jest wymagane? To nie wygląda na komentarz ...
Stephane
@Stephane :prefiks oznacza, że ​​został wykonany w trybie poleceń, ale nie potrzebujesz go :podczas pisania swojego vimrc
TankorSmash
To nie jest dobry pomysł. Powyższe pozwolenie na umieszczenie tych plików w folderze temp / jest już znacznie lepsze.
MonsieurMan
36

; W przypadku użytkowników systemu Windows powrót do katalogu tymczasowego

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup
Sooraj
źródło
6
Musiałem dodać set undodir = C: \ WINDOWS \ Temp
To nie zadziałało - musiałem zamiast tego użyć set dir = $ TEMP
Frank Schmitt
10

Zrobiłem wtyczkę o nazwie „noswapsuck”, która włącza plik wymiany tylko wtedy, gdy bufor zawiera niezapisane zmiany. Po zapisaniu zmian plik wymiany jest czyszczony. W związku z tym pliki wymiany zawierające tę samą zawartość co plik na dysku zostaną usunięte.

Pobierz tutaj: noswapsuck.vim

U mnie działa dobrze, ale nigdy wcześniej go nie publikowałem, więc z radością przyjmuję opinie.

Zalety:

  • Jedynymi plikami wymiany, które pozostaną na dysku, będą ważne pliki wymiany, które w rzeczywistości różnią się od pliku!

Niedogodności:

  • Jeśli bufor zawiera plik wymiany, nie zostanie on wykryty przy pierwszym otwarciu pliku. Zostanie wykryty tylko wtedy, gdy swapfilejest włączony, czyli gdy zaczniesz edytować bufor. To irytująco późno i będzie ci przeszkadzać. (Rozwiązane: teraz sprawdzamy istniejący plik wymiany po otwarciu bufora, tymczasowo włączając tę swapfileopcję ponownie).

  • Jeśli pracujesz w środowisku, w którym chcesz zminimalizować zapisy na dysku (np. Niski pobór mocy lub pliki zamontowane w sieci lub edytowanie dużego pliku), nie jest idealnym rozwiązaniem ciągłe usuwanie i ponowne tworzenie pliku wymiany zapisz i edytuj. W takich sytuacjach możesz:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    który zachowa plik wymiany po zapisaniu, ale nadal usunie go, gdy bufor straci fokus.

Nawiasem mówiąc, mam kolejną małą wtyczkę, :DiffAgainstFileOnDiskktóra może być całkiem przydatna po uderzeniu (r)ecover, aby sprawdzić, czy odzyskany bufor jest nowszy lub starszy niż istniejący plik lub identyczny z nim.

joeytwiddle
źródło
8

W systemie Windows dodaj następujące wiersze do _vimrc

" store backup, undo, and swap files in temp directory
set directory=$HOME/temp//
set backupdir=$HOME/temp//
set undodir=$HOME/temp//
Vlad Bezden
źródło
5

Ta odpowiedź dotyczy używania gVim na Windows 10. Nie mogę zagwarantować takich samych wyników dla innych systemów operacyjnych.

Dodaj:

set nobackup
set noswapfile
set noundofile

Do twojego pliku _vimrc.

Uwaga: to jest bezpośrednia odpowiedź na pytanie (w przypadku systemu Windows 10) i prawdopodobnie nie jest to najbezpieczniejsza rzecz (przeczytaj pozostałe odpowiedzi), ale w moim przypadku jest to najszybsze rozwiązanie.

wlwl2
źródło
0

Mam tę konfigurację w moim Ubuntu .vimrc. Nie widzę żadnych plików wymiany w moich plikach projektu.

set undofile
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

set backup                        " enable backups
set swapfile                      " enable swaps
set undodir=$HOME/.vim/tmp/undo     " undo files
set backupdir=$HOME/.vim/tmp/backup " backups
set directory=$HOME/.vim/tmp/swap   " swap files

" Make those folders automatically if they don't already exist.
if !isdirectory(expand(&undodir))
    call mkdir(expand(&undodir), "p")
endif
if !isdirectory(expand(&backupdir))
    call mkdir(expand(&backupdir), "p")
endif
if !isdirectory(expand(&directory))
    call mkdir(expand(&directory), "p")
endif
Raza
źródło