เป็นกลุ่ม: ส่วนขยาย swapfile ที่เป็นไปได้ทั้งหมดคืออะไร?


32

เมื่อคุณแก้ไขไฟล์เป็นกลุ่มจะสร้าง swapfile ที่มีชื่อเดียวกับไฟล์ปัจจุบันของคุณ แต่ใช้.swpนามสกุล

หาก.swpมีการใช้แล้วมันจะสร้าง.swoหนึ่ง หากถูกถ่ายไปแล้วคุณจะได้รับ.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

ในสายตาง่ายขึ้นเล็กน้อยพูดถึง regex:

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

แหล่งที่มาของเรื่องนี้ก็คือไฟล์ gitignore Github ของตัวเองสำหรับกลุ่ม


ดูเหมือนว่าจะตรงกับ ".swq" ถึง ".swz" ไม่ถูกต้อง
Eric Towers

@EricTowers มันควรจะถูกต้องแล้ว
รูเบิล

2
อาจสำคัญกว่า ... คุณผลักแพตช์ไปที่คอมไพล์ไหม? :-)
Eric Towers


9

ดีพอแล้ว .gitignore

ในขณะที่คำตอบอื่น ๆ ที่นี่มีความชัดเจนทางเทคนิคมากขึ้นที่นี่เป็นรายการที่ดีพอสำหรับคนส่วนใหญ่.gitignoreซึ่งเป็นที่ที่ฉันใส่ใจบ่อยที่สุด:

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

อย่างที่คุณเห็นจากคำตอบอื่น ๆvimสามารถสร้างชื่ออื่นได้หลายร้อยชื่อ แต่คุณต้องแยกไฟล์สว็อป16ไฟล์ก่อนที่จะล้มเหลว โดย generalizing เพื่อสิ่งที่ต้องการ*.s[a-z][a-z]ก็จะปรากฏขึ้นที่ถูกต้องมากขึ้นก็จะตรงกับจำนวนของส่วนขยายที่ถูกต้องซึ่งในกรณีของหมายถึงไฟล์เหล่านั้นจะไม่ได้รับการติดตามโดย.gitignore gitฉันไม่เคยจัดการเพื่อสร้าง 16 swap files สำหรับไฟล์เดียวกันใน 20 ปีของการใช้งานvimดังนั้นฉันหวังว่าคุณจะสามารถจัดการกับมันได้และมันจะใช้ได้ผลสำหรับคุณ

รุ่นที่เข้มงวด

ตามที่ระบุไว้ในความคิดเห็นนักพัฒนา Flash อาจมี.swfไฟล์ดังนั้นคุณอาจต้องการ

*.sw[g-p]

ซึ่งจะยังคงเพิกเฉย 10 ไฟล์สลับซึ่งมีมากมายสำหรับคนส่วนใหญ่ ส่วนที่เศร้าเพียงอย่างเดียวคือคุณสูญเสียความทรงจำ "สลับ"


2
ถ้าฉันไม่มีอะไรหายไปนั่นจะเป็นเพียงการจับ "swp" เท่านั้นเนื่องจากตัวถัดไปคือ "swo" ไม่ใช่ "swq" ส่วนตัวผมใช้ "* .sw [AP]" สำหรับเหตุผลที่คุณให้และยังเพราะมันอ่าน "แลกเปลี่ยน" :)
Jol

1
เพื่อหลีกเลี่ยงการเพิกเฉยต่อสิ่งที่ไม่ได้เป็นกลุ่มเช่น.sw2หรือ.sw$ควรติดตามใน repo
ลูกไก่

2
อย่าลืมรวม.swfไฟล์ของคุณ หรืออัปเกรด Flash Developers ของคุณเป็น HTML5 :-)
Jan Fabry

3
คุณสามารถหลีกเลี่ยงไฟล์ที่ถูกกฎหมายส่วนใหญ่ที่ถูกจับได้โดยการตรวจสอบไฟล์นำหน้า.หรือไฟล์_ที่ถูกเพิ่มเข้าไปด้วย
IMSoP

2
ฉันค้นพบ*.sw[a-p]ตัวช่วยจำ ฉันรักมัน :)
Wayne Werner

1

ทางเลือก. gitignore นี้ควรทำให้ทุกคนพอใจ บรรทัดที่สองคัดค้านละเว้น '* .swf'

*.sw[a-p]
!*.swf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.