Protingesnis atkūrimas Vim?

Kai ankstesnė Vim sesija sudužo, jus pasveikins „apsikeitimo failas ... jau yra!“. kiekvienam failui, kuris buvo atidarytas ankstesnėje sesijoje.

Ar galite padaryti šį „Vim“ protingesnį atkūrimo prašymą? (Neįjungus atkūrimo!) Visų pirma manau:

  • Jei pakaitinėje versijoje nėra neišsaugotų pakeitimų, o redagavimo procesas nebeveikia, ar galite Vim automatiškai ištrinti ieškos failą?
  • Ar galite automatizuoti siūlomą susigrąžinto failo išsaugojimo procesą nauju pavadinimu, sujungiant jį su diske esančiu failu ir tada ištrinant senąjį ieškos failą, kad būtų reikalinga minimali sąveika? Ypač tada, kai swap versija ir disko versija yra tos pačios, viskas turėtų būti automatinė.

Radau automatinį „SwapExists“ komandą, bet nežinau, ar tai padės šioms užduotims atlikti.

46
15 сент. nustatė Bruno De Fraine 15 sept. 2008-09-15 16:57 '08 16:57 2008-09-15 16:57
@ 7 atsakymai

Turiu savo paieškos failų saugojimą viename vietiniame kataloge, turėdamas jį .vimrc:

 set directory=~/.vim/swap,. 

Be kitų privalumų, tai leidžia lengvai ieškoti ieškos failų. Dabar, kai mano nešiojamasis kompiuteris praranda galią ar kažką kito, ir cleanswap atsarginę kopiją su krūva ieškos failų, tiesiog paleidžiu „ cleanswap scenarijų:

 TMPDIR=$(mktemp -d) || exit 1 RECTXT="$TMPDIR/vim.recovery.$USER.txt" RECFN="$TMPDIR/vim.recovery.$USER.fn" trap 'rm -f "$RECTXT" "$RECFN"; rmdir "$TMPDIR"' 0 1 2 3 15 for q in ~/.vim/swap/.*sw? ~/.vim/swap/*; do [[ -f $q ]] || continue rm -f "$RECTXT" "$RECFN" vim -X -r "$q" \ -c "w! $RECTXT" \ -c "let fn=expand('%')" \ -c "new $RECFN" \ -c "exec setline( 1, fn )" \ -cw\! \ -c "qa" if [[ ! -f $RECFN ]]; then echo "nothing to recover from $q" rm -f "$q" continue fi CRNT="$(cat $RECFN)" if diff --strip-trailing-cr --brief "$CRNT" "$RECTXT"; then echo "removing redundant $q" echo " for $CRNT" rm -f "$q" else echo $q contains changes vim -n -d "$CRNT" "$RECTXT" rm -i "$q" || exit fi done 

Tai pašalins bet kokius ieškos failus, susijusius su tikrais failais. Bet kuris neatitinkantis >

- Chouser

35
15 сент. Chouser atsakymas, rugsėjo 15 d 2008-09-15 17:20 '08, 17:20, 2008-09-15 17:20

Aš ką tik sužinojau:

http://vimdoc.sourceforge.net/htmldoc/diff.html#:DiffOrig

Aš nukopijuoju ir įklijuoju DiffOrig komandą į savo .vimrc failą ir jis veikia kaip žavesys. Tai labai palengvina ieškos failų atkūrimą. Nežinau, kodėl jis neįjungtas pagal nutylėjimą VIM.

border=0

Čia yra komanda, skirta tiems, kurie skuba:

  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis \ | wincmd p | diffthis 
20
21 окт. atsakė Jack Senechal spalio 21 d 2008-10-21 05:10 '08, 5:10, 2008-10-21 05:10

Priimtas atsakymas yra labai svarbus precedentas. Tarkime, jūs sukuriate naują buferį ir skambinate 2 valandas be taupymo, tada jūsų nešiojamas kompiuteris nukrenta. Jei paleisite siūlomą scenarijų , jis ištrins jūsų vienintelį įrašą, ieškos failą .swp . Nesu tikras, kas yra teisinga, tačiau atrodo, kad „diff“ komanda lygina tą patį failą su savimi. Toliau pakeista versija patikrina šį atvejį ir leidžia vartotojui išsaugoti failą kažkur.

 #!/bin/bash SWAP_FILE_DIR=~/temp/vim_swp IFS=$'\n' TMPDIR=$(mktemp -d) || exit 1 RECTXT="$TMPDIR/vim.recovery.$USER.txt" RECFN="$TMPDIR/vim.recovery.$USER.fn" trap 'rm -f "$RECTXT" "$RECFN"; rmdir "$TMPDIR"' 0 1 2 3 15 for q in $SWAP_FILE_DIR/.*sw? $SWAP_FILE_DIR/*; do echo $q [[ -f $q ]] || continue rm -f "$RECTXT" "$RECFN" vim -X -r "$q" \ -c "w! $RECTXT" \ -c "let fn=expand('%')" \ -c "new $RECFN" \ -c "exec setline( 1, fn )" \ -cw\! \ -c "qa" if [[ ! -f $RECFN ]]; then echo "nothing to recover from $q" rm -f "$q" continue fi CRNT="$(cat $RECFN)" if [ "$CRNT" = "$RECTXT" ]; then echo "Can't find original file. Press enter to open vim so you can save the file. The swap file will be deleted afterward!" read vim "$CRNT" rm -f "$q" else if diff --strip-trailing-cr --brief "$CRNT" "$RECTXT"; then echo "Removing redundant $q" echo " for $CRNT" rm -f "$q" else echo $q contains changes, or there may be no original saved file vim -n -d "$CRNT" "$RECTXT" rm -i "$q" || exit fi fi done 
16
29 апр. atsakymas coppit balandžio 29 d 2011-04-29 04:05 '11, 4:05, 2011-04-29 04:05

Puikus DiffOrig patarimas yra puikus. Čia yra „bash“ scenarijus, kurį naudoju paleisti kiekviename dabartinio katalogo puslapio faile:

 #!/bin/bash swap_files=`find . -name "*.swp"` for s in $swap_files ; do orig_file=`echo $s | perl -pe 's!/\.([^/]*).swp$!/$1!' ` echo "Editing $orig_file" sleep 1 vim -r $orig_file -c "DiffOrig" echo -n " Ok to delete swap file? [y/n] " read resp if [ "$resp" == "y" ] ; then echo " Deleting $s" rm $s fi done 

Tikriausiai galima naudoti daugiau klaidų tikrinimo ir citavimo, tačiau jis vis dar dirbo.

4
24 апр. Mark Grimes atsakymas, pateiktas balandžio 24 d 2009-04-24 06:03 '09, 6:03 2009-04-24 06:03

find./-type f -name ". * sw [klmnop]" - ištrinti

Kreditas: „@Shwaydogg“ https://superuser.com/questions/480367/whats-toliau- tęsiasi---delete-vim-swapfiles-ive-already-recovered-from

Pirmiausia eikite į katalogą

0
06 окт. atsakymas, kurį pateikė user3386050 Oct 06 2016-10-06 14:10 '16 at 14:10 pm 2016-10-06 14:10

Nenoriu nustatyti VIM darbo katalogo .vimrc. Čia pateikiamas „chouser“ scenarijaus pakeitimas, nukreipiantis ieškos failus į ieškos kelią, patikrinant dublikatus ir patikrinant juos. Jis buvo parašytas, skubėjęs, nepamirškite jo įvertinti prieš naudojimą.

 #!/bin/bash if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then echo "Moves VIM swap files under <base-path> to ~/.vim/swap and reconciles differences" echo "usage: $0 <base-path>" exit 0 fi if [ -z "$1" ] || [ ! -d "$1" ]; then echo "directory path not provided or invalid, see $0 -h" exit 1 fi echo looking for duplicate file names in hierarchy swaps="$(find $1 -name '.*.swp' | while read file; do echo $(basename $file); done | sort | uniq -c | egrep -v "^[[:space:]]*1")" if [ -z "$swaps" ]; then echo no duplicates found files=$(find $1 -name '.*.swp') if [ ! -d ~/.vim/swap ]; then mkdir ~/.vim/swap; fi echo "moving files to swap space ~./vim/swap" mv $files ~/.vim/swap echo "executing reconciliation" TMPDIR=$(mktemp -d) || exit 1 RECTXT="$TMPDIR/vim.recovery.$USER.txt" RECFN="$TMPDIR/vim.recovery.$USER.fn" trap 'rm -f "$RECTXT" "$RECFN"; rmdir "$TMPDIR"' 0 1 2 3 15 for q in ~/.vim/swap/.*sw? ~/.vim/swap/*; do [[ -f $q ]] || continue rm -f "$RECTXT" "$RECFN" vim -X -r "$q" \ -c "w! $RECTXT" \ -c "let fn=expand('%')" \ -c "new $RECFN" \ -c "exec setline( 1, fn )" \ -cw\! \ -c "qa" if [[ ! -f $RECFN ]]; then echo "nothing to recover from $q" rm -f "$q" continue fi CRNT="$(cat $RECFN)" if diff --strip-trailing-cr --brief "$CRNT" "$RECTXT"; then echo "removing redundant $q" echo " for $CRNT" rm -f "$q" else echo $q contains changes vim -n -d "$CRNT" "$RECTXT" rm -i "$q" || exit fi done else echo duplicates found, please address their swap reconciliation manually: find $1 -name '.*.swp' | while read file; do echo $(basename $file); done | sort | uniq -c | egrep '^[[:space:]]*[2-9][0-9]*.*' fi 
0
24 мая '13 в 23:16 2013-05-24 23:16 atsakymą pateikė Mario Aguilera gegužės 13 d., 13:16, 2013-05-24 23:16

Turiu tai savo .bashrc faile. Norėčiau suteikti atitinkamą kreditą šio kodo daliai, bet aš pamiršau, iš kur jį gavau.

 mswpclean(){ for i in `find -L -name '*swp'` do swpf=$i aux=${swpf//"/."/"/"} orif=${aux//.swp/} bakf=${aux//.swp/.sbak} vim -r $swpf -c ":wq! $bakf"  rm $swpf if cmp "$bakf" "$orif" -s then rm $bakf  echo "Swap file was not different: Deleted" $swpf else vimdiff $bakf $orif fi done for i in `find -L -name '*sbak'` do bakf=$i orif=${bakf//.sbak/} if test $orif -nt $bakf then rm $bakf  echo "Backup file deleted:" $bakf else echo "Backup file kept as:" $bakf fi done } 

Aš tiesiog ją paleisiu savo projekto šaknyje ir, jei failas yra kitoks, jis atveria vim diff. Tada bus išsaugotas paskutinis išsaugotas failas. Kad tai būtų tobula, turėčiau tiesiog pakeisti pastarąjį:

 else echo "Backup file kept as:" $bakf 

kažkas panašaus

 else vim $bakf -c ":wq! $orif"  echo "Backup file kept and saved as:" $orif 

bet aš neturėjau laiko ją patikrinti.

Tikiuosi, kad tai padės.

0
11 апр. Atsakymas pateikiamas Miguel 11 balandžio. 2014-04-11 18:08 '14 at 18:08 2014-04-11 18:08

Kiti klausimai dėl žymių arba Užduoti klausimą