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

Если вы создаете RAID массивы на 4 необработанных блочных устройствах вместо 2 x 4 разделов, это означает, что все операции восстановления RAID могут обязательно выполняться на всех устройствах, и наоборот.

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

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

Ничего не сказано о деталях процесса, которые нельзя найти в типичной документации по разбиению на разделы и mdadm.

32
29.11.2016, 21:51
4 ответа

достаточно хорошо .gitignore

Хотя другие ответы здесь явно более технически полны, это достаточно хорошая запись для большинства .gitignore s, где я больше всего об этом заботился:

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

Как вы можете видеть из других ответов vim может создавать сотни других имен, но вам придется складывать 16 файлов подкачки, прежде чем это завершится ошибкой. Обобщение на что-то вроде *. S [az] [az] могло бы показаться более правильным, оно также будет соответствовать множеству допустимых расширений , что в случае .gitignore ] означает, что эти файлы не будут отслеживаться git . Мне никогда не удавалось создать 16 файлов подкачки для одного и того же файла за 20 лет использования vim , поэтому я надеюсь, что вам удастся сделать то же самое, и это сработает для вас.

более строгая версия

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

*.sw[g-p]

, который по-прежнему будет игнорировать 10 файлов подкачки, чего достаточно для большинства людей. Печально только то, что вы теряете мнемонику «поменять местами».

12
27.01.2020, 19:37

Информация из фрагмента кода - это в справке Vim. См. : h файл подкачки :

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.
22
27.01.2020, 19:37

Конкретный фрагмент кода, который вы ищете (и комментарий), находится в 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. */
44
27.01.2020, 19:37

В, немного более легком для глаз, regex-speak:

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

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

20
27.01.2020, 19:37

Теги

Похожие вопросы