Portál AbcLinuxu, 2. listopadu 2025 18:36
set backup a set backupdir=adresar znam, ale chtel bych, aby se soubory zalohovaly pod zadany adresar s plnou cestou. Takze pokud budu editovat napr. /etc/hosts, zazalohuje se jako (napr.) ~/.backup/etc/hosts~. Jde to nejak udelat? Hledal jsem cely den ale nic... Dik
Ale asi to bez prepsani fakt nepujde (mam ten dojem ze adresar musi byt predem vytvoreny, jeste se podivam). I tak dik.
Napsal jsem si nasledujici skript:
fu! SetBackupDir()
let s:dirname = "~/.backup" . expand("%:p:h")
execute "silent !mkdir -p " . s:dirname
execute "set backupdir=" . s:dirname
endf
autocmd BufWritePre * call SetBackupDir()Zda se mi to docela elegantni, jeste bych misto volani systemoveho mkdir radsi pouzil built-in funkci, ale jaksi se u me nejmenuje mkdir ale nejak jinak. Nevi nekdo jak napr. vypsat vsechny funkce typu *mkdir?
call mkdir("dir_name", "p") nefunguje?
"p" to zarve, pokud uz adresar existuje. Pokud ne tak ho vytvori a vse je OK. Kdyz ale ulozim znovu, zarve, ze adresar nemohl byt vytvoren.
if !isdirectory("dir_name")
call mkdir("dir_name", "p")
endif
setbackup.vim) je v ~/.vim/plugin a ma tenhle obsah:
fu! SetBackupDir()
" zalohuj soubory s celou cestou pod ~/.backup
let s:dirname = expand("~/.backup") . expand("%:p:h")
" pokud je potreba, vytvor adresar
if !isdirectory(s:dirname)
call mkdir(s:dirname, "p")
endif
execute "set backupdir=" . s:dirname
endf
" pred ulozenim souboru nastav adresar pro zalohu
autocmd BufWritePre * call SetBackupDir()
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.