Vim: які всі можливі розширення swapfile?


32

Під час редагування файлу vim він створює свопфайл з тим самим іменем, що і ваш поточний файл, але з .swpрозширенням.

Якщо .swpвже прийнято, то воно генерує .swoодне. Якщо це вже прийнято, то ви отримаєте.swa і т.д. і т.д.

Я не міг знайти жодної документації щодо того, який саме порядок іменування-резервного копіювання для цих файлів, чи може хтось уточнити, за якою умовою вибрано розширення?


Дивіться також: Vi та Vim
коти

Відповіді:


44

Конкретний фрагмент коду, який ви шукаєте (і коментуєте), знаходиться у 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

Інформація з фрагмента коду надається у допомогу Vim. Дивіться :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.

17

У, трохи простіше на очах, виразка розмовляє:

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

Джерелом для цього є власний файл githgnore Github для Vim .


Здається, це неправильно відповідає ".swq" через ".swz".
Eric Towers

@EricTowers Це має бути правильним зараз.
рубль

2
Можливо, важливіше ... Ви штовхнулися на патч під git? :-)
Ерік Тауерс


9

досить добре .gitignore

Хоча інші відповіді тут явно більш технічно завершені, тут досить хороший запис для більшості .gitignores, саме там я найчастіше піклувався про це:

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

Як видно з інших відповідей, ви vimможете створити сотні інших імен, але вам доведеться скласти 16 файлів підкачки, перш ніж це не вдасться. Узагальнюючи щось подібне, *.s[a-z][a-z]може здатися більш правильним, воно також відповідатиме безлічі дійсних розширень, що у випадку засобів .gitignoreозначає, що ці файли не будуть відслідковуватися git. Мені ніколи не вдалося створити 16 файлів підкачки для того самого файлу за 20 років використання, vimтому я сподіваюся, що ви зможете зробити те саме, і це допоможе вам.

суворіша версія

Як зазначалося в коментарях, у розробників Flash можуть бути .swfфайли, тому ви можете віддати перевагу

*.sw[g-p]

який все ще буде ігнорувати 10 файлів свопу, що для більшості людей достатньо. Єдина сумна частина - ви втрачаєте мнепоніку "своп".


2
Якщо я щось не пропускаю, це лише збирається зловити "swp", оскільки наступним є "swo", а не "swq". Особисто я використовую "* .sw [ap]" з тієї причини, яку ви вказали, а також тому, що вона пише "swap" :)
JoL

1
Щоб уникнути ігнорування речей, які не є vim своп-файлами, .sw2або .sw$які слід відслідковувати в репо.
пташенята

2
Не забудьте включити своє .swf файли. Або оновіть розробників Flash до HTML5 :-)
Ян Фабрі

3
Ви можете уникнути потрапляння більшості законних файлів, перевіривши, .чи _є провідні або які також додані.
IMSoP

2
Я сам виявив *.sw[a-p]мнемоніку. Мені подобається :)
Уейн Вернер

1

Ця альтернатива .gitignore повинна задовольнити всіх. Другий рядок заперечує ігнорування '* .swf'.

*.sw[a-p]
!*.swf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.