আমি ইতিমধ্যে পুনরুদ্ধার করা ভিম স্যুটফাইলগুলি মুছে ফেলার সহজ উপায় কী?


82

কখনও কখনও ভিম ​​ক্র্যাশ করে আমাকে একটি সোয়াপফাইলে ফেলে দেয়। সেটা খুবই ভালো. তারপরে আমি যে ফাইলটি সম্পাদনা করছি তা খুললাম এবং ভিম আমাকে জিজ্ঞাসা করছে যে আমি পুনরুদ্ধার করতে চাই কিনা। আমি, ধন্যবাদ। এটি শেষ হয়ে গেলে, ভিম আমাকে বলে,

You may want to delete the .swp file now.

কেন, হ্যাঁ, আমি করি। আমি কেমন করে ঐটি করি? আমি বুঝতে পেরেছিলাম যে এটি কেবল পুরানো সোয়াফিল ফাইলটিকে আবার একটি সোয়াফিল হিসাবে ব্যবহার করা শুরু করবে এবং যখন আমি প্রস্থান করব তখন পরিষ্কার করুন, তবে এটি সত্য নয়। এটি একটি নতুন তৈরি করে, এটি পরিষ্কার করে দেয় এবং আমি যখন আবার ফাইলটি খুলি তখন এটি আমাকে আবার প্রথমটি থেকে পুনরুদ্ধার করতে অনুরোধ করে।

অবশ্যই আমি কিছু মিস করছি।

উত্তর:


80

কিছুটা সহজ উপায়:

টার্মিনাল এমুলেটর থেকে:

vim filename

তারপরে পুনরুদ্ধারটি চয়ন করুন এবং আপনি যদি লিখেন এমন স্ব্যাপটি মুছে ফেলতে চান (সংরক্ষণ করুন) এবং তারপরে এটি ভিএম এর মধ্যে থেকে করুন:

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

... এবং এবার মুছুন পছন্দ করুন ।

আমি এই সম্পর্কে সবেমাত্র জানতে পেরেছি এবং আমি মনে করি এখন থেকে এটি করব। এরপরে আমি দুর্ঘটনাক্রমে কোনও ওয়ার্কিং ফাইল ওভাররাইট করব না, যদি পুনরুদ্ধারটি দূষিত হয়ে যায় (যদিও আমি এর আগে কখনও চেষ্টা করি নি)।

স্ট্যাক ওভারফ্লো (যেখানে আমি এই টিপটি পেয়েছি) এ এই প্রশ্নে প্রাসঙ্গিক টিপস রয়েছে


15
আমি একটি deleteবিকল্প নেই, কেবল আছে: [হে] কলম (ই) ডিট (আর) ইকোভার (প্রশ্ন) ইউইটি (এ) বোর্ট, আমার কী করা উচিত?
আরনে

4
@ আর্ন: আমার অভিজ্ঞতা থেকে বোঝা যায় যে ফাইলটি বর্তমানে ভিএম-এর অন্য কোনও ক্ষেত্রে খোলা আছে?
মিয়ালয়

1
[ডি] একাদশ বিকল্পটি কেবলমাত্র আমি
ভিএম

@ আর্নে আমারও একই সমস্যা ছিল। তবে কিছুক্ষণ পরে, এক ঘন্টা বা তার পরে, আমি ভিএম পুনরায় চালু করেছি এবং বিকল্পটি পাওয়া গেল। পিসি তখন আর চালু করা হয়নি। ভিএম ভাবতে পারে যে আরও একটি ভিআইএম প্রক্রিয়া চলছে। এজন্য এটি বিকল্পটি দেখায় না।
ka3ak

6
যারা বলে যে তারা কোনও (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.Ie সম্ভবত আপনার আর একটি ভিআইএম প্রক্রিয়া চলছে যা এই বিকল্পটি গোপন করার কারণে করছে। এটি আপনাকে swpপ্রথমে একটি ফাইল কেন দেয় তাও ব্যাখ্যা করতে পারে !
Lqueryvg

38

একটি ডিরেক্টরিতে সমস্ত ভিম অদলবদ ফাইলগুলি পরিষ্কার করতে:

আপনি কি নিশ্চিতরূপে ডিরেক্টরি ট্রি যে কোন তেজ swap 'র ফাইল প্রয়োজন হবে না এবং তাদের পরিত্রাণ পেতে চান, আপনি নিম্নলিখিত কমান্ড ডিরেক্টরির মধ্যে যখন তেজ হয় ব্যবহার করতে পারেন না চলমান (এমনকি অন্য একটি উইন্ডোতে বা এমনকি একটি পৃথক লগইন সেশন):

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

গুগল গ্রুপগুলিতে জাঙ্ক .swp ফাইলগুলি সরানো থেকে কিছু অনুপ্রেরণা এবং চিন্তাভাবনা এসেছে । এটা কার নাম দিয়ে শেষ সমস্ত ফাইল মুছে ফেলবে .swk, .swl, .swm, .swn, .swo, অথবা .swp বর্তমান ডিরেক্টরি-ট্রির।

এটি বিভিন্ন কারণে আপনি যা চান তা নাও হতে পারে:

  • যেমন বলা হয়েছে, এটি বর্তমান ডিরেক্টরি গাছটি অনুসন্ধান করে  ; অর্থাত্, বর্তমান ডিরেক্টরি এবং সমস্ত উপ-ডিরেক্টরিগুলি পুনরাবৃত্তভাবে। এটি প্রশ্নটি যা চেয়েছে তার বাইরে চলে যায় এবং এটি ওভারকিল হিসাবে বিবেচিত হতে পারে।
  • বিবৃত, এটা যাদের নাম দিয়ে শেষ সমস্ত ফাইল মুছে ফেলবে .swk, .swl, .swm, .swn, .swo, অথবা .swp, এবং শুধুমাত্র .swp।  গ্যারি জনসন বলেছেন ,

    এছাড়াও, সমস্ত সোয়াপ ফাইল .swp এ শেষ হয় না। যদি ভিমের কোনও অদলবদল তৈরি করা দরকার এবং একটি শেষ হয়ে গেছে .swp ইতিমধ্যে বিদ্যমান রয়েছে, তবে ভিম নতুনটির জন্য এক্সটেনশন .sw ব্যবহার করবে এবং এর পরে .swn ব্যবহার করবে। আমি মনে করি এটি বর্ণমালার মাধ্যমে কেবল পিছনের দিকে চলেছে তাই কিছু ব্যবহার করে

      \*.sw[nop] 
    

    অথবা এমনকি

      \*.sw? 
    

    আরও পুঙ্খানুপুঙ্খ হবে।

    এই পোস্টের মূল লেখক বলেছেন,

    'klmnop' ওভারকিল হতে পারে, তবে এটি সাধারণত নিশ্চিত করে যে আমি সেগুলি সব পেয়েছি।

  • অন্যদিকে, এটি আন্ডারকিল হতে পারে।  রুবল প্রস্তাব দেওয়া

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

    যা সমস্ত (ছোট হাতের) তিন অক্ষর ছোটো থেকে এক্সটেনশনগুলি সাথে মেলে .saaথেকে .swp। তিনি যোগ করেছেন, "যদিও এটি আরও সম্পূর্ণ সমাধান হিসাবে সতর্ক থাকুন, এটি কোনও .svg চিত্র ফাইল এবং .swf অ্যাডোব ফ্ল্যাশ ফাইলগুলি গ্রহণ করবে। আপনি এটি মিলে যায় যদি আপনি ঐ ফাইল সঙ্গে কাজ Regex পরিবর্তন করতে চান পারে। " .sav, .snd(সাউন্ড তথ্য), .sql, .src, .srt(SubRip ভিডিও উপশিরোনাম ফরম্যাট), এবং অনেক অন্যান্য সাধারণ এক্সটেনশান নেই।

  • এটি ওভারকিল হতে পারে। বিবৃত, এটা যাদের নাম দিয়ে শেষ সমস্ত ফাইল মুছে ফেলবে .swk, .swl, .swm, .swn, .swo, অথবা .swp। তবে, স্পষ্টতই, ভিম স্যু্যাপ ফাইলগুলি সাধারণত "ডট" ফাইল হয়। আপনি যদি সম্পাদনা করেন hello.cppতবে সোয়াপ ফাইলটি হতে পারে .hello.cpp.swpরাউবলের উত্তরে যেমন দেখানো হয়েছে (তবে ব্যাখ্যা করা হয়নি) কেবল এমন ফাইলগুলি মুছে ফেলা নিরাপদ যাদের নামগুলি বিন্দু দিয়ে শুরু হয়; যেমন, সাথে

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

14

ls -aডিরেক্টরিতে সমস্ত ফাইল তালিকাভুক্ত করে টাইপ করুন

টাইপ rm .whatever.your.swpহয় এবং টিপুনenter

এটি যে সহজ।

.সামনে যে ফাইল ফাইল দেখায় সেগুলি একটি লুকানো ফাইল এবং সাধারণত দেখা যায় না।

মনে রাখবেন যে পরিবর্তনগুলি তাত্ক্ষণিক এবং স্থায়ী তাই সাবধানতা অবলম্বন করুন।


3
যদিও এটি খুব সহজ নয়। আমি তেজ ত্যাগ করার, swap 'র ডিরেক্টরি নেভিগেট, ফাইলের নাম স্মরণ কর, এবং সম্ভবত কিনা তা স্থির এটা আছে file.swpবা file.swo। তারপরে আমাকে যেখানে ছিলাম সেখানে ফিরে যেতে হবে। হিট :eকরা অনেক সহজ সমাধান।
Peeja

1
ls: cannot access +A: No such file or directory
জোনাথন

এটি আমার প্রয়োজন
ইউজার 5510975

7

BTW। কিছু প্লাগইন আপনার জন্য এটি স্বয়ংক্রিয়ভাবে করে: autoswap.vim

বর্ণনা থেকে:

  1. ফাইলটি কি অন্য কোনও উইন্ডোতে ইতিমধ্যে অন্য ভিম সেশনে খোলা আছে?
  2. যদি তা হয় তবে উইন্ডোটিতে অদলবদল করুন যেখানে আমরা সেই ফাইলটি সম্পাদনা করছি।
  3. অন্যথায়, যদি swapfile নিজেই ফাইলের চেয়ে পুরানো হয় তবে কেবল এ থেকে পরিত্রাণ পান।
  4. অন্যথায়, কেবল ফাইলটি কেবল পঠন করার জন্য খুলুন যাতে আমরা এটির দিকে নজর রাখতে পারি এবং এটি সংরক্ষণ করতে পারি।

5
প্লাগইন ছাড়াই ডিফল্টরূপে ভিআইএম কেন বুদ্ধিমান আচরণ করতে পারে না আমাকে কেউ বলতে পারেন?
পাভেল আইমর্দা

6

না, আফাইক আপনি কিছুই মিস করছেন না। Vimআপনি পরিষ্কারভাবে মুছে ফেলা না হওয়া পর্যন্ত স্যুপফিলটিকে ব্যাকআপ হিসাবে রাখা চালিয়ে যান।

কেবল সংরক্ষণ করুন এবং প্রস্থান করুন এবং আবার একই ফাইলটি আবার খুলুন। আপনাকে অনুরোধ জানানো হবে (আবার)

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

এখন শুধু টিপুন d:)


11
সত্যি? মানে আমি জানতাম। তবে সে বোকা। এটি অবশ্যই "সরল" নয়।
Peeja

1
যাইহোক, প্রস্থান এবং গর্ভপাতের মধ্যে পার্থক্য কী?
trusktr

5
আমার ক্ষেত্রে মুছার বিকল্প নেই। আমার কি করা উচিৎ? (আমি সংরক্ষণ করেছি, ছেড়ে দিয়েছি এবং আবার
খুললাম

আপনাকে প্রথমে ভিম ছাড়ার দরকার নেই, কেবল টাইপ করুন: ই
<<<<

2

বেশিরভাগ ইউনিক্স কমান্ডের মতো ভিমও সহজ এবং স্পষ্ট, বরং ধরে নেওয়া এবং অন্তর্নিহিত।

আপনি (আর) দিয়ে পুনরুদ্ধার করুন। এটি আপনি পুনরুদ্ধার পছন্দ করেন না বা পুনরুদ্ধারটি দূষিত, আপনি এটিকে বাতিল করতে পারেন। আপনি যদি এটি পছন্দ করেন তবে আপনি ফাইলটি সংরক্ষণ করতে পারেন। পুনরুদ্ধার ফাইলটি আপনার জন্য মুছে ফেলা হয়নি কারণ এটি সুস্পষ্ট নয় এবং 100% পরিস্থিতিতে সঠিক হবে না।

সুতরাং আপনি (র) বাস্তবে, (ডাব্লু) আচার এবং (কিউ) ইউটি, তবে হয় আবার সম্পাদনা করুন এবং (ডি) একাদশ বা "rm .myfile.js.swp" চয়ন করুন এবং আবার সম্পাদনা করুন। এটি করা দ্রুত এবং সবসময়ই ভিমের দৃষ্টিকোণ থেকে 100% সঠিক আচরণ।


ঠিক আছে, তাহলে আমাকে কীভাবে অদলবদলের ফাইলটি দেওয়ার জন্য ভিম পাওয়ার কোনও উপায় আছে? আমি স্যুপফিলটি মুছে ফেলার জন্য দ্বিতীয় কমান্ড চালাতে পেরে খুশি (আসলে, আমি এর ব্যাখ্যাটিই পছন্দ করি), তবে আমি যেখানেই থাকুক না কেন সোয়াপ ফাইলটি মুছতে একটি আদেশ চাই। উদাহরণস্বরূপ, আমি একটি পৃথক swapfile ডিরেক্টরি পেয়েছি। দুটি খোলার ফাইলের যদি একই ভিত্তি হয়, তবে আমি প্রোগ্রামিকভাবে সিদ্ধান্ত নিতে পারছি না যে বর্তমান বাফারের জন্য সঠিক সোয়াফফিল।
Peeja

1
সত্য, তবে একটি সহজ "পুনরুদ্ধার এবং মুছুন" বিকল্পটি প্রদান করা দুর্দান্ত। এটি সম্ভবত সহজ টম বাস্তবায়ন। আমি স্কুলে যাওয়ার কাজটি শেষ করেছি যদি এটি ইতিমধ্যে সম্পন্ন না করা হয় তবে কোনও দিন করব do
trusktr

1
বেশিরভাগ ইউনিক্স কমান্ডগুলি সহজ, সুস্পষ্ট এবং বুদ্ধিমান ডিফল্ট আচরণ থাকে। ভিম পুনরুদ্ধার সহজ নয়, ইউএক্সটি লিব্রেওফিসের মতোই খারাপ, আচরণটি সাধারণভাবে ভুল এবং ফলস্বরূপ, অনেক ক্ষেত্রে ডেটা হ্রাস হয়।
পাভেল আইমর্দা

1

এই ফাইলগুলি আমার জন্যও বিরক্তিকর ছিল, তবে আমি .vimrc- এ বিকল্পটি সেট করেছিলাম - ভিম set noswapfile এটি তৈরি করা রোধ করতে এবং পরিবর্তে, ফাইলগুলিকে মেমোরিতে রাখে।


ওপি অনুসারে, সোয়াফফায়ালগুলি দরকারী, তাই এগুলি বন্ধ করা সর্বোত্তম বিকল্প নাও হতে পারে।
কুসালানন্দ

সোয়াপ ফাইল বন্ধ করবেন না। যদি আপনার মেশিন ক্রাশ হয়ে যায় তবে আপনি আপনার কাজটি হারাবেন।
ল্যাক্যরিভগ

অবশ্যই এই বিকল্পটি ঝুঁকি বোঝায়, এবং আমি জানি যে এই অদলবদলগুলি vi * সম্পাদকের উত্থানের সময়ে তৈরি হয়েছিল যখন এটি প্রায়শই ক্র্যাশ হয়। এখন আমি বলতে পারি ভিম স্থিতিশীলভাবে কাজ করে এবং এগুলি হ্যাঁ, উত্তরাধিকার হিসাবে উপস্থিত রয়েছে as
দিমিত্রি

1

এখানে আরো একটি সম্পূর্ণ Regex জন্য গিটহাব নিজস্ব gitignore ফাইল উপর ভিত্তি করে সব তেজ swap 'র ফাইল পরিষ্কার হয় তেজ

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

সতর্কতা অবলম্বন করুন, যদিও এটি আরও সম্পূর্ণ সমাধান, এটি কোনও .svg চিত্র ফাইল এবং .swf অ্যাডোব ফ্ল্যাশ ফাইলগুলি গ্রহণ করবে। আপনি যদি এই ফাইলগুলির সাথে কাজ করেন তবে আপনি রেজেক্সটি সংশোধন করতে চাইতে পারেন।


1

যোগ করার জন্য এখানে একটি স্নিপেট .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বিদ্যমান কিনা তা জানতে :

  • লক্ষ্য ফাইলটি ভিআইএম খোলার সাথে সাথে, :swবর্তমান অদলবদল ফাইলটি পেতে এক্সিকিউট করুন।
  • বর্তমান সোয়াপ ফাইলটি যে ডিরেক্টরিটিতে রয়েছে তা ডিরেক্টরিটি পরীক্ষা করুন।
  • তারপরে ডিরেক্টরিটি খোলা ফাইলের নামের সাথে একটি অদলবদু ফাইল রয়েছে এবং এর এক্সটেনশন রয়েছে কিনা তা পরীক্ষা করে দেখুন .swp

উপরের স্নিপেট একই প্রক্রিয়া অনুসরণ করে, তবে সমস্ত অদলবদল অপসারণ করে।

আশাকরি এটা সাহায্য করবে.


0

ম্যানুয়াল থেকে :h swap:

কমান্ডটি ব্যবহার করে আপনি বর্তমান অদলবদলের নামটি দেখতে পাচ্ছেন: :sw[apname]


সতর্কতা ... এটি সম্ভবত মুছতে হবে এমন ফাইলটির নাম নয়। আপনি .swpফাইলটি মুছবেন না হওয়া অবধি :swকমান্ডটি সম্ভবত আপনাকে .swoফাইলটির নাম দেবে - যা আপনি মুছতে চান তা নয়
Lqueryvg

0

যদি আপনাকে জিজ্ঞাসা করা হয় তবে Dবর্তমান ফাইলের অদলবদুর ফাইলটি মুছতে টিপুন ।

আপনি যদি না হন তবে আপনাকে এটি ম্যানুয়ালি করতে হবে।

এটি করার একটি বিকল্প উপায় হ'ল:

ফাইল সন্ধান / অনুসন্ধান করতে:

find | grep ".searchRefineVertTabs.jsp.swp"

এবং তারপরে এই ফাইলটি মুছুন:

rm ./.searchRefineVertTabs.jsp.swp

1
আমি আছি জিজ্ঞেস করলেন, কিন্তু আমার পছন্দ হয় পুনরুদ্ধার । প্রশ্ন হল এটি পুনরুদ্ধারের ঠিক পরে কীভাবে এটি মুছবেন , যেহেতু এটি আর প্রয়োজন নেই। আমার কাছে তা না করা ভিমের ব্যর্থতার মতো বলে মনে হচ্ছে। তবে গ্রহণযোগ্য উত্তর হ'ল আমি এ পর্যন্ত খুঁজে পাওয়া সবচেয়ে পরিষ্কার ওয়ার্কফ্লো।
Peeja

-1

তুমি ব্যবহার করতে পার,

rm -f .<filename>.<ext>.swp

উদাহরণ:

rm -f .rc.local.swp

এটি প্রযুক্তিগতভাবে কাজ করে তবে বর্তমান গৃহীত উত্তরের তুলনায় এটি এত সহজে কোথাও নেই।
পিজা

<ext>কমপক্ষে লিনাক্সে ফাইলের নাম হিসাবে শূন্য বা আরও এক্সটেনশান অন্তর্ভুক্ত করে প্লাস এখানে অপ্রয়োজনীয়।
পাভেল আইমর্দা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.