سؤال ما هي أسهل طريقة لحذف Vim swapfiles استعدتها بالفعل من؟


أحيانا تعطل فيم ويترك لي swapfile. هذا رائع. ثم أقوم بفتح الملف الذي قمت بتحريره وسألتني Vim إذا كنت أريد استرداده. أنا أفعل. عندما ينتهي الأمر ، يقول لي فيم ،

You may want to delete the .swp file now.

لماذا ، نعم ، أنا أفعل. كيف يمكنني فعل ذلك؟ فكنت أحسب أن مجرد البدء في استخدام swapfile القديم ك swapfile مرة أخرى وتنظيفه عند إنهاء ، ولكن هذا ليس صحيحا. يجعل واحدة جديدة ، وتنظف واحدة ، وعندما فتح الملف مرة أخرى فإنه يدفع لي مرة أخرى للتعافي من أول واحد.

بالتأكيد أنا في عداد المفقودين شيء.


66
2017-09-27 14:47


الأصل




الأجوبة:


طريقة أبسط قليلاً:

من محاكي المحطة:

vim filename

ثم اختر استعادة، وإذا كنت تريد حذف مبادلة لك اكتب (حفظ) ثم قم بهذا من داخل vim:

:e          // no argument needed. It assumes the current buffer.

...و اختار حذف هذا الوقت.

لقد اكتشفت هذا الأمر ، وأعتقد أنني سأفعل ذلك من الآن فصاعدا. ثم لن أقوم بالكتابة فوق ملف العمل عن طريق الخطأ ، إذا كان الانتعاش قد أفسد (على الرغم من أنني لم أحاول ذلك من قبل).

هناك أيضا نصائح ذات الصلة على هذا السؤال على Stack Overflow (حيث وجدت هذا التلميح).


69
2017-12-13 12:39



أنا لا delete الخيار ، لا يوجد سوى: [O] القلم (E) dit (R) ecover (Q) uit (A) bort ، ماذا أفعل؟ - Arne
@ أرني: من تجربتي التي عادة ما تعني فتح الملف حاليًا في مثال آخر من vim؟ - miyalys
يظهر خيار [D] elete فقط بعد أن قمت بتحديث إلى Vim 7.4 - jmlarson
Arne كان لدي نفس المشكلة. ولكن بعد مرور بعض الوقت ، ساعة أو نحو ذلك ، أعدت تشغيل vim وكان الخيار متاحًا. لم يتم إعادة تشغيل جهاز الكمبيوتر في ذلك الوقت. قد vim أعتقد أن عملية vim أخرى قيد التشغيل. هذا هو السبب في أنه لا يظهر الخيار. - ka3ak
بالنسبة لأولئك الذين يقولون أنهم لا يرون (D)elete الخيار ، انظر :help swap-exists. اقتبس On Unix this choice is only offered when the process that created the swap file does not appear to be running. أي. ربما لديك عملية أخرى vim قيد التشغيل مما تسبب في إخفاء هذا الخيار. قد يفسر أيضا لماذا لديك swp الملف في المقام الأول! - Lqueryvg


لتنظيف كافة ملفات تبديل vim في دليل:

إذا كنت متأكدًا من أنك لا تحتاج إلى أي ملفات لمبادلة vim في شجرة دليل وتريد التخلص منها ، فيمكنك استخدام الأمر التالي في الدليل بينما vim ليس جري (ولا حتى في نافذة أخرى أو حتى جلسة تسجيل دخول مختلفة):

find . -type f -name "*.sw[klmnop]" -delete

جاء بعض الإلهام والأفكار من إزالة الملفات غير المرغوب فيها .swp في مجموعات Google. سيؤدي هذا إلى حذف جميع الملفات التي تنتهي أسماؤها .swk، .swl، .swm، .swn، .swoأو .swp في شجرة الدليل الحالية.

قد لا يكون هذا ما تريده ، وذلك لعدة أسباب:

  • كما ذكر ، فإنه يبحث في الدليل الحالي شجرة. على سبيل المثال ، الدليل الحالي وكافة الأدلة الفرعية ، بشكل متكرر. هذا يتجاوز ما يطلبه السؤال ، ويمكن اعتباره مبالغة.
  • كما ذكر ، فإنه سيتم حذف جميع الملفات التي تنتهي أسماؤها .swk، .swl، .swm، .swn، .swoأو .swp، وليس فقط .swp. غاري جونسون يقول،

    أيضا ، لا تنتهي جميع ملفات المبادلة في .swp. إذا كان فيم يحتاج إلى إنشاء مبادلة ملف واحد تنتهي في .swp موجود بالفعل ، سوف تستخدم فيم تمديد .swo للواحد الجديد و. swn بعد ذلك. اعتقد انها مجرد يستمر إلى الوراء من خلال الأبجدية. ذلك باستخدام شيء من هذا القبيل

      \*.sw[nop] 
    

    او حتى

      \*.sw? 
    

    سيكون أكثر شمولا.


30
2017-08-30 18:39





نوع ls -a الذي يسرد كل الملفات في الدليل

نوع rm .whatever.your.swp هو واضغط أدخل

بكل بساطة.

أي ملف يظهر مع . في المقدمة هو ملف مخفي ولا ينظر عادة.

تذكر أن التغييرات فورية ودائمة لذلك كن حذرا.


13
2017-12-21 17:14



هذا ليس بسيطا للغاية ، على الرغم من. لا بد لي من مغادرة فيم ، والتنقل في دليل المبادلة ، وتذكر اسم الملف ، وربما تقرر ما إذا كان file.swp أو file.swo. ثم لا بد لي من العودة إلى حيث كنت. ضرب :e هو حل أبسط من ذلك بكثير. - Peeja
ls: cannot access +A: No such file or directory - Jon
هذا هو ما أحتاج - user5510975


راجع للشغل. بعض المكوِّنات الإضافية تقوم بذلك تلقائيًا: autoswap.vim

من الوصف:

  1. هل الملف مفتوح بالفعل في جلسة Vim أخرى في نافذة أخرى؟
  2. إذا كان الأمر كذلك ، فقم بالتبديل إلى النافذة حيث نقوم بتحرير هذا الملف.
  3. خلاف ذلك ، إذا كان swapfile أقدم من الملف نفسه ، فقط قم بالتخلص منه.
  4. خلاف ذلك ، فتح الملف للقراءة فقط حتى نتمكن من إلقاء نظرة عليه ويمكن حفظه.

6
2017-08-04 20:27



هل يمكن لأي أحد أن يخبرني لماذا لا يستطيع vim أن يكون لديه سلوك معقول افتراضيًا ، بدون مكونات إضافية؟ - Pavel Šimerda


لا ، AFAIK كنت تفتقد شيئا. Vim يستمر في الاحتفاظ بـ swapfile كنسخة احتياطية حتى تقوم بحذفه بشكل صريح.

ببساطة حفظ وإنهاء وإعادة فتح الملف نفسه مرة أخرى. ستتم مطالبتك (مرة أخرى) باستخدام

[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete it

الآن فقط اضغط d :)


5
2017-09-27 15:00



هل حقا؟ أعني ، كنت أعرف ذلك. لكن هذا غبي. انها بالتأكيد ليست "بسيطة". - Peeja
بالمناسبة ، ما الفرق بين الإقلاع والإجهاض؟ - trusktr
لا يوجد خيار حذف في حالتي. ماذا يجب أن أفعل؟ (قمت بحفظ ، إنهاء ، وإعادة فتح) - Paschalis
لا تحتاج إلى إنهاء vim أولاً ، فقط اكتب: e <return> بمجرد اختيار "تعديل على أي حال" أو "استرداد" في الملف ، وستحصل على خيار حذفه - 00prometheus


Vim ، مثل معظم أوامر Unix ، بسيط وصريح ، بدلاً من افتراض وضمني.

تسترد مع (ص). أنت لا تحب الانتعاش أو الانتعاش فاسد ، يمكنك التخلص منه. إذا كنت ترغب في ذلك ، يمكنك حفظ الملف. لا يتم حذف ملف الاسترداد نظرًا لأن هذا الأمر غير صريح ولن يكون صحيحًا بالنسبة إلى 100٪ من الحالات.

إذن أنت (ص) ecover ، (w) شعيرة و (q) uit ، ثم إما تحرير مرة أخرى واختيار (د) elete أو "rm .myfile.js.swp" وتحريرها مرة أخرى. هذا هو سريع القيام به ودائما ، من وجهة نظر فيم ، والسلوك الصحيح 100 ٪.


1
2017-09-27 09:40



حسنا ، إذن هل هناك طريقة للحصول على vim لتعطيني الطريق إلى ملف المبادلة؟ يسعدني تشغيل الأمر الثاني لحذف swapfile (في الحقيقة ، أنا أحب explicitness من ذلك) ، لكنني أرغب في أمر لحذف swapfile أينما كان. على سبيل المثال ، لقد حصلت على دليل swapfile منفصل. إذا كان هناك ملفين مفتوحين لهما نفس الاسم الأساسي ، لا أستطيع برمجياً تحديد أي swapfile الصحيح للمخزن المؤقت الحالي. - Peeja
صحيح ، ولكن توفير خيار بسيط "استرداد وحذف" سيكون من الرائع. من المحتمل أيضًا أن يكون تطبيق توم سهلًا. سوف أفعل ذلك يوما ما عندما انتهيت من الذهاب إلى المدرسة إذا لم يتم ذلك بالفعل. - trusktr
معظم أوامر unix بسيطة وواضحة وذات سلوك افتراضي معقول. استرداد Vim ليست بسيطة ، و UX سيئة كما هو الحال في LibreOffice ، والسلوك هو خطأ واضح والنتيجة ، في كثير من الحالات ، هو فقدان البيانات. - Pavel Šimerda


هنا regex أكثر اكتمالا لتنظيف جميع ملفات المبادلة vim على أساس ملف Gitignore جيثب الخاصة ل همة

$ find ./ -type f \( -name "\.*\.s[a-v][a-z]" -o -name "\.*\.sw[a-p]" \) -delete

كن حذرا ، في حين أن هذا هو الحل الأكثر اكتمالا ، فإنه سوف يأخذ أي ملفات صور .svg وملفات فلاش أدوبي. SWF. قد ترغب في تعديل regex إذا كنت تعمل مع تلك الملفات.


1
2018-06-07 15:33





إليك مقتطف لإضافته .vimrc. يحذف جميع ملفات المبادلة التي هي المرتبطة المخزن المؤقت الملف الحالي وإعادة تمديد مقايضة.

function! DeleteFileSwaps()
    write
    let l:output = ''
    redir => l:output 
    silent exec ':sw' 
    redir END 
    let l:current_swap_file = substitute(l:output, '\n', '', '')
    let l:base = substitute(l:current_swap_file, '\v\.\w+$', '', '')
    let l:swap_files = split(glob(l:base.'\.s*'))
    " delete all except the current swap file
    for l:swap_file in l:swap_files
        if !empty(glob(l:swap_file)) && l:swap_file != l:current_swap_file 
            call delete(l:swap_file)
            echo "swap file removed: ".l:swap_file
        endif
    endfor
    " Reset swap file extension to `.swp`.
    set swf! | set swf!
    echo "Reset swap file extension for file: ".expand('%')
endfunction
command! DeleteFileSwaps :call DeleteFileSwaps()

بمجرد مواجهة مع مأزق ، يمكن للمرء تنفيذ :DeleteFileSwaps هذا أمر عظيم إذا تضافرت مع :windo أو :tabdo أوامر.

:tabdo DeleteFileSwaps 

تفاصيل أكثر: ملف يمكن أن يكون لديك أكثر من ملف المبادلة 1. السبب ل ملف المبادلة ، مع تمديد .swpلا تزال موجودة و vim سوف تستمر في خلق جديدة بسببها. لمعرفة ما إذا كان .swp يوجد:

  • مع فتح الملف الهدف في vim ، تنفيذ :sw للحصول على ملف المبادلة الحالي.
  • تحقق من الدليل الذي يحتوي على ملف المبادلة الحالي في.
  • ثم تحقق مما إذا كان الدليل يحتوي على ملف مبادلة باسم الملف المفتوح ولها امتداد لل .swp.

يتبع المقتطف أعلاه نفس العملية ، ولكن أزل جميع ملفات المبادلة.

أتمنى أن يساعدك هذا.


1
2018-06-18 21:48





من الدليل :h swap:

يمكنك رؤية اسم ملف المبادلة الحالي المستخدم مع الأمر: :sw[apname]


0
2018-01-26 20:03



تحذير ... ربما هذا ليس اسم الملف الذي تريد حذفه. حتى تحذف .swp الملف ، و :sw الأمر ربما يعطيك اسم .swo الملف - وهو ليس ما تريد حذفه. - Lqueryvg


إذا تم سؤالك ثم اضغط د حذف ملف المبادلة الملف الحالي.

إذا لم تكن بعد ذلك عليك القيام بذلك يدويا.

طريقة بديلة واحدة للقيام بذلك هي:

لتحديد موقع / ملف البحث:

find | grep ".searchRefineVertTabs.jsp.swp"

ثم احذف هذا الملف:

rm ./.searchRefineVertTabs.jsp.swp

0
2017-09-22 12:05



أنا صباحا سأل ، ولكن خياري هو استعادة. السؤال هو كيفية حذفها فقط بعد لقد تعافيت ، لأنها لم تعد ضرورية. يبدو وكأنه فشل vim لا تفعل ذلك بالنسبة لي. لكن الإجابة المقبولة هي أنظف تدفق عمل وجدته حتى الآن. - Peeja


كانت هذه الملفات مزعجة للغاية بالنسبة لي ، لكنني قمت بتعيين الخيار في .vimrc - set noswapfile لمنع vim إنشائه ، وبدلاً من ذلك ، حفظ الملفات في الذاكرة.


0
2018-06-23 12:03



وفقًا لـ OP ، فإن swapfiles مفيدة ، لذا قد لا يكون إيقاف تشغيلها هو الخيار الأفضل. - Kusalananda
لا تقم بإيقاف تشغيل ملفات المبادلة. إذا تعطل جهازك ، فستفقد عملك. - Lqueryvg
بالطبع ، هذا الخيار ينطوي على مخاطر ، وكما أعرف أن ملفات التبادل هذه قد ظهرت عند ظهور vi * editiors عندما حدثت الأعطال في كثير من الأحيان. الآن يمكن أن أقول vim يعمل مستقرة وأنها موجودة كشيء إرث ، إيمهو. - Dmitrii