Vim: apa semua ekstensi swapfile yang mungkin?


32

Saat Anda mengedit file dalam vim, itu menghasilkan swapfile dengan nama yang sama dengan file Anda saat ini, tetapi dengan .swpekstensi.

Jika .swpsudah diambil, maka itu menghasilkan satu satu .swosatu. Jika itu sudah diambil, maka Anda dapatkan .swa, dll. Dll

Saya tidak dapat menemukan dokumentasi apa pun tentang urutan penamaan-fallback untuk file-file ini, adakah yang bisa menjelaskan dengan konvensi apa ekstensi dipilih?


Lihat juga: Vi dan Vim
cat

Jawaban:


44

Bagian kode tertentu yang Anda cari (dan komentar) ada di memline.c:

    /* 
     * Change the ".swp" extension to find another file that can be used. 
     * First decrement the last char: ".swo", ".swn", etc. 
     * If that still isn't enough decrement the last but one char: ".svz" 
     * Can happen when editing many "No Name" buffers. 
     */
    if (fname[n - 1] == 'a')        /* ".s?a" */
    {   
        if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
        {   
            EMSG(_("E326: Too many swap files found"));
            vim_free(fname);
            fname = NULL;
            break;  
        }
        --fname[n - 2];             /* ".svz", ".suz", etc. */
        fname[n - 1] = 'z' + 1;
    }
    --fname[n - 1];                 /* ".swo", ".swn", etc. */

22

Informasi dari cuplikan kode ada di bantuan Vim. Lihat :h swap-file:

The name of the swap file is normally the same as the file you are editing,
with the extension ".swp".
- On Unix, a '.' is prepended to swap file names in the same directory as the
  edited file.  This avoids that the swap file shows up in a directory
  listing.
- On MS-DOS machines and when the 'shortname' option is on, any '.' in the
  original file name is replaced with '_'.
- If this file already exists (e.g., when you are recovering from a crash) a
  warning is given and another extension is used, ".swo", ".swn", etc.
- An existing file will never be overwritten.
- The swap file is deleted as soon as Vim stops editing the file.

Technical: The replacement of '.' with '_' is done to avoid problems with
       MS-DOS compatible filesystems (e.g., crossdos, multidos).  If Vim
       is able to detect that the file is on an MS-DOS-like filesystem, a
       flag is set that has the same effect as the 'shortname' option.
       This flag is reset when you start editing another file.

                            *E326*
       If the ".swp" file name already exists, the last character is
       decremented until there is no file with that name or ".saa" is
       reached.  In the last case, no swap file is created.


9

cukup baik .gitignore

Sementara jawaban lain di sini jelas lebih lengkap secara teknis di sini adalah entri yang cukup baik untuk sebagian besar .gitignoredi mana saya paling sering peduli tentang ini:

# vim swap files
##################
*.sw[a-p]

Seperti yang Anda lihat dari jawaban lain vimdapat membuat ratusan nama lain, tetapi Anda harus menumpuk 16 file swap sebelum ini gagal. Dengan menggeneralisasi ke sesuatu seperti *.s[a-z][a-z]bisa tampak lebih benar itu juga akan cocok dengan banyak ekstensi yang valid yang dalam kasus .gitignoreberarti file-file itu tidak akan dilacak oleh git. Saya tidak pernah berhasil membuat 16 file swap untuk file yang sama dalam 20 tahun penggunaan, vimjadi saya harap Anda dapat melakukan hal yang sama dan ini akan berhasil untuk Anda.

versi yang lebih ketat

Seperti yang ditunjukkan dalam komentar, pengembang Flash mungkin memiliki .swffile sehingga Anda dapat memilih

*.sw[g-p]

yang masih akan mengabaikan 10 file swap yang banyak bagi kebanyakan orang. Satu-satunya bagian yang menyedihkan adalah Anda kehilangan mnemonik "swap".


2
Kecuali saya melewatkan sesuatu, itu hanya akan menangkap "swp" karena yang berikutnya adalah "swo" bukan "swq". Secara pribadi, saya menggunakan "* .sw [ap]" untuk alasan yang Anda berikan dan juga karena berbunyi "swap" :)
JoL

1
Untuk menghindari mengabaikan hal-hal yang tidak seperti swap file .sw2atau .sw$harus dilacak dalam repo.
anak ayam

2
Ingatlah untuk memasukkan .swffile Anda . Atau tingkatkan pengembang Flash Anda ke HTML5 :-)
Jan Fabry

3
Anda dapat menghindari sebagian besar file yang sah ditangkap dengan memeriksa bagian depan .atau _yang juga ditambahkan.
IMSoP

2
Saya menemukan *.sw[a-p]mnemonik sendiri. Saya menyukainya :)
Wayne Werner

1

Alternatif .gitignore ini harus memuaskan semua orang. Baris kedua meniadakan mengabaikan '* .swf'.

*.sw[a-p]
!*.swf
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.