Vim:考えられるすべてのスワップファイル拡張子は何ですか?


32

vimでファイルを編集すると、現在のファイルと同じ名前で、.swp拡張子が付いたスワップファイルが生成されます。

.swp既に取得されている場合は、.swo1つずつ生成されます。それが既に取られている場合.swa、などを取得します。

これらのファイルの正確な命名とフォールバックの順序に関するドキュメントを見つけることができませんでしたが、拡張子が選択されている規則によって誰でも明確にできますか?


参照:ViおよびVim
cat

回答:


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]

このソースは、Vim用のGithub独自のgitignoreファイルです。


これは、「。swq」から「.swz」に誤って一致するようです。
エリックタワーズ

@EricTowers今は正しいはずです。
ルーブル

2
おそらくもっと重要です... gitのパッチをプッシュしましたか?:-)
エリックタワーズ


9

十分良い .gitignore

ここの他の答えは明らかに技術的に完全ですが、ここではほとんどの人にとって十分なエントリです。.gitignoreこれは私が最も頻繁に気にしている場所です:

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

他の回答からわかるように、他のvim何百もの名前を作成できますが、これが失敗する前に16個のスワップファイルをスタックする必要があります。*.s[a-z][a-z]より正確に見えるようなものに一般化することにより、多くの有効な拡張子にも一致します.gitignoreこれらの拡張子は、これらのファイルがによって追跡されないことを意味しますgit。使用してvimから20年以内に同じファイルに対して16個のスワップファイルを作成することはできなかったので、同じことを何とかできればうまくいくと思います。

より厳しいバージョン

コメントで指摘されているように、Flash開発者は.swfファイルを持っている可能性があります。

*.sw[g-p]

ほとんどの人にとって十分な10個のスワップファイルはまだ無視されます。唯一の悲しい部分は、「スワップ」ニーモニックを失うことです。


2
何かが足りない場合を除き、次は「swq」ではなく「swo」なので、「swp」をキャッチするだけです。個人的に、私はあなたが与えた理由のために「* .sw [ap]」を使用し、また「swap」と読みますので:)
JoL

1
vimスワップファイルのようなもの、.sw2または.sw$リポジトリで追跡する必要のあるものを無視しないようにします。

2
.swfファイルを含めることを忘れないでください。または、Flash開発者をHTML5にアップグレードします:-)
Jan Fabry

3
リーディング.または_追加されたファイルをチェックすることにより、ほとんどの正当なファイルがキャッチされることを回避できます。
IMSoP

2
私は*.sw[a-p]自分でニーモニックを発見しました。私はそれが大好きです:)
ウェインワーナー

1

この.gitignoreの代替は、すべての人を満足させるはずです。2行目は、「*。swf」を無視することを無効にします。

*.sw[a-p]
!*.swf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.