Domyślnie vim
pozostawia pliki wymiany w moim katalogu projektu, aw razie awarii pozostawia pliki kopii zapasowej.
Czy mogę temu zapobiec? Czy muszę zaktualizować .VCSignore
plik wszystkich moich projektów ?
Domyślnie vim
pozostawia pliki wymiany w moim katalogu projektu, aw razie awarii pozostawia pliki kopii zapasowej.
Czy mogę temu zapobiec? Czy muszę zaktualizować .VCSignore
plik wszystkich moich projektów ?
Odpowiedzi:
Domyślnie Vim nie pozostawia plików kopii zapasowych. Są to tylko przejściowe pliki, które istnieją, gdy Vim zapisuje bufor na dysku. Jak opisano w :help backup-table
tym zachowaniu, można kontrolować za pomocą opcji 'backup'
i 'writebackup'
:
'backup' 'writebackup' action ~
off off no backup made
off on backup current file, deleted afterwards (default)
on off delete old backup, backup current file
on on delete old backup, backup current file
Jeśli chodzi o pliki wymiany, przydatne może być zebranie ich w dedykowanym katalogu. Można to zrobić za pomocą 'directory'
opcji. Na przykład
:set directory^=$HOME/.vim/tmp//
doda $HOME/.vim/tmp
do nagłówka listy katalogów, których Vim spróbuje użyć podczas tworzenia pliku wymiany. Końcowe //
powoduje, że Vim koduje całą nazwę ścieżki do pliku, więc nie ma kolizji z plikami o podobnych nazwach z różnych katalogów.
Zastrzeżenie : To skutecznie wyłącza zdolność Vima do zauważenia, czy wielu użytkowników próbuje edytować ten sam plik, ponieważ pliki wymiany są przechowywane w różnych lokalizacjach.
Poniższy fragment kodu (zaadaptowany z vimrc tpope'a ) również wyłączy plik wymiany dla bufora, gdy nie zostanie zmodyfikowany, w ten sposób, jeśli Vim / twój komputer ulegnie awarii, gdy masz otwartą wiązkę plików, pozostawione pliki wymiany będą tylko dla zmodyfikowanych plików.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Uwaga : Ponieważ plik wymiany istnieje tylko wtedy, gdy bufor jest modyfikowany, ma to podobny efekt jak ustawienie 'directory'
. Jeśli bufor nie jest zmodyfikowany, inny Vim może rozpocząć edycję bez powiadomienia. Jeśli drugi Vim zapisze, zanim pierwszy wprowadzi więcej zmian, nie zostaną zauważeni, dopóki użytkownik nie spróbuje zapisać lub coś spowoduje, że Vim sprawdzi, czy plik jest zmodyfikowany.
Używam mojego .vimrc
na wielu komputerach, w tym na serwerach współdzielonych. Niekoniecznie chcę, aby ludzie mogli zobaczyć pliki, nad którymi pracuję, i lubię utrzymywać względnie czysty katalog domowy. To jest moje rozwiązanie, które działa dobrze w systemach Linux i Mac OS X.
" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
:silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif
set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
Pamiętaj, że spowoduje to utworzenie .tmp
katalogu, ~/.vim
jeśli jeszcze nie istnieje. To byłby nowy dom twoich plików wymiany. W przypadku plików cofania mam również następujące elementy .vimrc
(które są dość podobne):
if exists("+undofile")
" undofile -- This allows you to use undos after exiting and
" restarting. NOTE: only present in 7.3+
" :help undo-persistence
if isdirectory( $HOME . '/.vim/.undo' ) == 0
:silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
endif
set undodir=~/.vim/.undo
set undofile
endif
Oto co robię w moim vimrc:
fun! MkdirIfNeeded(dir, flags, permissions)
if !isdirectory(a:dir)
call mkdir(a:dir, a:flags, a:permissions)
endif
endfun
" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
let tmpdir = 'C:/tmp/vim_' . whoami
else
let whoami = substitute(system("whoami"), '\n', '', '')
let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)
let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir
Stworzy /var/tmp/vim_<username>
i użyje tego do przechowywania wszystkich plików związanych z vimem. Utrzymywanie katalogu projektu w czystości.
Używanie whoami
zapewnia, że możesz używać vimrc globalnie (tj. Dla użytkownika i roota), wciąż korzystając z oddzielnych katalogów; jeśli nie jest to potrzebne, możesz zastąpić go katalogiem na stałe, aby przyspieszyć uruchomienie. Możesz także użyć ~/.vim/
katalogu, ale lubię go używać, /var/tmp
ponieważ zwykle jest to oddzielny system plików.
Używam, /var/tmp
ponieważ /tmp
często jest czyszczony przy ponownym uruchomieniu. Prawdopodobnie nie chcesz, aby ten katalog był zapisywany na całym świecie, ponieważ ludzie mogliby tam umieszczać pliki, aby robić potencjalnie szkodliwe rzeczy po otwarciu pliku.
adduser
lub cokolwiek, czego używasz do tworzenia użytkowników. W każdym razie większość ludzi używa Vima na zaufanych komputerach (ale twój komentarz jest dobry jako taki).
$HOME
gdzieś.
/var/
to inny system plików. W teorii jest to, że będzie ona zapobiec dużo pisze /
, /usr
albo /home
, co prowadzi do zmniejszenia fragmentacji i ryzyko uszkodzenia plików w przypadku awarii ... Jest to również dlaczego skrzynek pocztowych i rzeczy są na /var
domyślnie, a nie w homedir ...
/var/tmp
jest zawsze dostępny do zapisu na całym świecie - jest to systemowy katalog tymczasowy. (Cóż, możesz to zmienić tak, aby nie było, ale to jedna z tych rzeczy, w których systemy uniksowe z przyjemnością pozwalają ci zachować elementy po ich zerwaniu). Jeśli masz innego użytkownika w systemie, on / ona może tworzyć/var/tmp/vim_«your_username»
z uprawnieniami według własnego wyboru. A następnie wypełnij go dowiązaniami symbolicznymi do ważnych plików, które prawdopodobnie zostaną zniszczone przez pliki tymczasowe vim.