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

13
Git nigdy nie pomoże Ci odzyskać pracy po awarii systemu. Git może również ignorować Twoje pliki * .swp. = D
vmassuchetto



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

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

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

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.


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//

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.


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
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.