Vim: каковы все возможные расширения файла подкачки?

32

Когда вы редактируете файл в vim, он генерирует файл подкачки с тем же именем, что и у вашего текущего файла, но с .swpрасширением.

Если .swpон уже занят, он генерирует один .swoодин. Если это уже занято, то вы получите .swaи т. Д. И т. Д.

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

Newb
источник
Смотрите также: Ви и Вим
кот

Ответы:

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]

Источником этого является собственный файл Gitubore для Vim от Github .

рубль
источник
Кажется, это неправильно соответствует «.swq» через «.swz».
Эрик Тауэрс
@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]» по той причине, которую вы указали, а также потому, что она гласит «своп» :)
JoL
1
Чтобы не игнорировать вещи, которые не являются vim-файлами подкачки, например, .sw2или .sw$которые следует отслеживать в репозитории.
птенцы
2
Не забудьте включить ваши .swfфайлы. Или обновите свои Flash-разработчики до HTML5 :-)
Ян Фабри
3
Вы можете избежать захвата большинства легитимных файлов, проверив ведущие .или _добавив их.
IMSoP
2
Я открыл *.sw[a-p]мнемонику сам. Я люблю это :)
Уэйн Вернер
1

Эта альтернатива .gitignore должна удовлетворить всех. Вторая строка отрицает игнорирование '* .swf'.

*.sw[a-p]
!*.swf
zeozod
источник