Wyłączanie tworzenia plików wymiany w vimie

216

Czy istnieje sposób na wyłączenie .swptworzenia plików w vimie? lub przynajmniej utwórz je wszystkie w jednym miejscu, aby łatwo je znaleźć i usunąć.

Uważam je za szczególnie denerwujące, gdy kopiuję katalog nadrzędny podczas edycji w tym samym czasie. Oczywiście wiem, że mogę użyć find -exec, aby je znaleźć i usunąć. Ale chcę bardziej praktycznego rozwiązania.

Nadia Alramli
źródło

Odpowiedzi:

255

Aby wyłączyć pliki wymiany z poziomu vima, wpisz

:set noswapfile

Aby trwale wyłączyć pliki wymiany, dodaj poniżej swój ~/.vimrcplik

set noswapfile

Aby uzyskać więcej informacji, zobacz dokumentację Vima na temat pliku wymiany

dwc
źródło
6
Pliki wymiany są dobre, jeśli Twój edytor ulega awarii (awaria zasilania itp.), Pamiętaj tylko.
koonse
1
Inną opcją jest nadal używanie pliku wymiany, ale pozostaw go w pamięci, aby nie zapisywał dysku twardego. To nie ochroni Cię przed utratą pliku podczas awarii, ale jeśli otworzysz ten sam plik w innym vimie, natychmiast Ci o tym powie. Polecenie to: ustaw katalog = / dev /
shm
Odpowiedź trusktr pozwala zachować zalety wymiany plików podczas rozwiązywania problemu PO.
jpaugh
Wewnątrz vima możesz również wyłączyć plik wymiany podczas otwierania pliku::noswapfile edit /path/to/file
Torkel Bjørnson-Langen
Moją osobistą filozofią dotyczącą utraty danych jest DBAB i często oszczędzam ...
Samy Bencherif
156

Ustaw następujące zmienne w .vimrc lub / etc / vimrc, aby vim umieszczał pliki wymiany, tworzenia kopii zapasowych i cofania w specjalnej lokalizacji zamiast katalogu roboczego edytowanego pliku:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

Użycie podwójnych ukośników na ścieżce każe vimowi włączyć funkcję, w której unika kolizji nazw. Na przykład, jeśli edytujesz plik w jednej lokalizacji i inny plik w innej lokalizacji, a oba pliki mają tę samą nazwę, nie chcesz, aby kolizja nazw występowała w ~ / .vim / swap /. Jeśli określisz ~ / .vim / swap // z dwoma końcowymi ukośnikami, vim utworzy pliki wymiany, używając całej ścieżki edytowanych plików, aby uniknąć kolizji (ukośniki w ścieżce pliku zostaną zastąpione symbolem procentu%).

Na przykład, jeśli edytujesz /path/one/foobar.txt i /path/two/foobar.txt, zobaczysz dwa pliki wymiany w ~ / .vim / swap / o nazwie% path% one% foobar.txt i% path% dwa% odpowiednio foobar.txt.

trusktr
źródło
Możesz również dodać, że kiedyś zapisane pliki kopii zapasowej mogą uratować skórkę programisty
Bartek Skwira
Komentarz: (nie krytyka), To wydaje się dobre głównie dla programistów, ponieważ do czytania plików i drobnych edycji lub nieistotnego przechowywania notatek, które są dużą częścią korzystania z vima przez wiele osób, wydaje się, że lepiej pominąć dodatkową księgowość. Osobiście wolę, aby we wszystkich zadaniach nie było żadnych swapów ani innych automatycznych kopii zapasowych. Jeśli naprawdę muszę coś opracować, wolałbym mieć bardziej zaawansowany framework do ochrony, najlepiej z kontrolą wersji kodu itp.
j riv
@LelaDax To prawda, że ​​przez większość czasu te pliki są w większości bezużyteczne, ponieważ używam git do całego mojego kodu źródłowego. W rzadkich przypadkach (jak katastrofa) przydały się. Ale tak naprawdę często używam historii cofania. O wiele łatwiej jest nawigować tak szybko niż sprawdzanie poleceń git, aby wyświetlić poprzednią historię. gundo sprawia, że ​​nawigacja po drzewie cofania jest łatwa i łatwa. Mógłbym jednak żyć bez plików wymiany i kopii zapasowych.
trusktr
26
Po prostu FYI dla ludzi, którzy są nowi (jak ja haha ​​...), musisz zrobić, przejdź do ~ / .vim / i sam utwórz katalogi. Nie utworzy ich automatycznie dla Ciebie.
sierpień
1
Możesz także napisać kod w swoim vimrc, aby automatycznie utworzyć dla ciebie foldery, co zrobiłem w moim. Tak więc, na nowych systemach, dostaję mój vimrc, a on zajmuje się resztą.
trusktr
42

Znalazłem odpowiedź tutaj :

vim -n <file>

otwiera plik bez pliku wymiany.

Dodatkowo:

set dir=/tmp

in .vimrctworzy pliki wymiany w /tmp.

markus_b
źródło
Co z *.ext~plikami kopii zapasowej? Czy jest jakaś opcja wiersza poleceń, aby je również wyłączyć?
Salman von Abbas,
Jest to bardzo przydatne w przypadku tych jednorazowych ogromnych plików! Dzięki.
Felipe Alvarez
28

oto moje osobiste ustawienia kopii zapasowej ~ / .vimrc

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup
cpjolicoeur
źródło
13

Zgadzam się z tymi, którzy pytają, dlaczego vim potrzebuje tych wszystkich funkcji „odzyskiwania po awarii”, skoro żaden inny edytor tekstu nie zawraca sobie tym głowy. Nie chcę, aby vim tworzył JAKIEKOLWIEK dodatkowe pliki w katalogu edytowanego pliku podczas edycji, dziękuję bardzo. W tym celu mam to w sobie_vimrc aby wyłączyć pliki wymiany i przenieść irytujące pliki „kopii zapasowych” do katalogu Temp:

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile
Jez
źródło
9
Myślę, że fakt, że inni redaktorzy się tym nie przejmują, odbija się słabo na innych redaktorach niż źle na vi (m). Wybór, aby ten sam katalog był domyślnym miejscem umieszczania tych plików, jest trochę niefortunny, choć przynajmniej minimalnie możliwy do obrony. (np. w środowisku z wieloma serwerami, w środowisku montowanym krzyżowo, może nie być oczywiste, gdzie znaleźć plik odzyskiwania w momencie, gdy jest on najbardziej potrzebny)
Domingo Ignacio
3
Obsługa plików wymiany Vima jest po prostu okropna. Użyłem go do odzyskania utraconych danych może 5 razy. Ale miałem problem z odzyskaniem pliku wymiany około 9 000 razy, co i tak jest niezmiennie identyczne z plikiem, albo, co gorsza, nieaktualną wersją. Może to być dobra funkcja, jeśli proces odzyskiwania nie był tak straszny. recovery.vim trochę pomaga, ale wciąż jest zbyt interaktywny.
joeytwiddle
3
Sublime Text ma disaster recovery. Kocham to! Nie muszę nawet zapisywać pliku, gdy wznawiam wszelkie zmiany, które wprowadziłem, zapisałem lub nie, są one przywracane.
leetNightshade
Mam prostą komendę automatyczną, która zapisuje wszystkie zmiany natychmiast po ich wprowadzeniu, dzięki czemu zarówno pliki wymiany, jak i kopie zapasowe są bezużyteczne.
tbodt
2
@ TorkelBjørnson-Langen Prawdopodobnie to moja wina, że ​​ponownie uruchomiłem komputer bez zamykania wszystkich sesji Vima, a następnie byłem paranoikiem, co do tego, które pliki do odzyskania są rzeczywiście ważne. W każdym razie starałem się uzyskać to, co najlepsze z obu światów, pisząc wtyczkę, która utrzymuje plik wymiany tylko wtedy, gdy są niezapisane edycje: vim-swap-is-awesome.vim
joeytwiddle
7

Możesz ustawić katalog kopii zapasowej i katalog na zero, aby całkowicie wyłączyć pliki wymiany, ale ogólnie zaleca się po prostu umieszczenie ich w scentralizowanym katalogu. Vim dba o to, aby nie było żadnych kolizji nazwisk itp. jest to więc całkowicie bezpieczna alternatywa:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/
monokrom
źródło
3
Powinieneś dodać podwójny ukośnik //na końcu ścieżek, abyś mógł zmodyfikować dwa pliki o tej samej nazwie w tym samym czasie.
Samuel O'Malley,
Dzięki, @ SamuelO'Malley. Co robi //?
monokrom
Sprawdź, :help directoryczy chcesz przeczytać w tym celu dokumenty. Podwójny ukośnik mówi vimowi, aby zakodował pełną ścieżkę pliku do nazwy pliku wymiany, np. %home%sam%dotfiles%.gitignore.swpZamiast po prostu .gitignore.swp.
Samuel O'Malley,
3

Jeśli set directory=""wstawisz plik exrc, wyłączysz plik wymiany. Spowoduje to jednak wyłączenie odzyskiwania.

Więcej informacji tutaj .

Brian Rasmussen
źródło
3

Jeśli używasz git, możesz dodać *.swpdo .gitignore.

Evan Hu
źródło
Myślę, że tego potrzebuje większość użytkowników! Wyłączanie plików wymiany to zła praktyka.
DenisKolodin
2

nie twórz pliku wymiany vim tylko dla konkretnego pliku

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile
zzapper
źródło
1
Lub dla wszystkich plików w określonym katalogu, wydaje się, że działają następujące (tylko krótkie testy):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty
1

Dla każdego, kto próbuje ustawić to dla projektów Railsowych, dodaj

set directory=tmp,/tmp

do twojego

~/.vimrc

Tak więc pliki .swp będą znajdować się w swojej naturalnej lokalizacji - w katalogu tmp (na projekt).

łoś
źródło