যে ফাইলের জন্য আমার কোনও লেখার অনুমতি নেই সেগুলি কীভাবে সংরক্ষণ করবেন?


26

কখনও কখনও এটি ঘটে থাকে যে আমি কোনও ফাইল খুলি এবং [read-only]স্ট্যাটাস লাইনে সতর্কতাটি লক্ষ্য করা বা "ভুলে যাওয়া" না করে নিজের ব্যবহারকারী হিসাবে কিছু সংশোধন করি (যেমন কিছু র্যান্ডম /etcকনফিগার ফাইল যেমন /etc/resolv.conf)।

:w!স্পষ্টতই এই ক্ষেত্রে ব্যর্থ হয় কারণ আমার ব্যবহারকারীর যাইহোক লেখার অনুমতি নেই। সুতরাং আমাকে :w /home/filenameপ্রস্থান করতে হবে এবং sudo mv ...খুব অস্বস্তি বোধ করতে হবে।

এমন কোনও উপায় আছে যাতে আমি বর্তমানে চালু হওয়া ফাইলটি সংরক্ষণ করতে সক্ষম হওয়ার জন্য অস্থায়ীভাবে রুটকে বাড়িয়ে তুলি? (প্রদত্ত আমি ভিতরে আছি sudoersবা / এবং আমি suসরাসরি করতে পারি )?

উত্তর:


24

কৌশলটি এটিতে একটি বাহ্যিক কল ব্যবহার করা হয় sudo:

:w !sudo tee %

এটি কীভাবে কাজ করে:

  • :w !<command>স্টাডিন <command>হিসাবে বাফারের সামগ্রীর সাথে সম্পাদন করে ।
  • teeস্ট্যান্ডিনকে একটি ফাইলে নকল করে & stdout; %বর্তমান ফাইলনামে প্রসারিত হয় ..
  • আপনি sudoরুট অনুমতি জন্য এটি উপসর্গ ।

আপনি সত্যিই ভিমের সাথে ফাইলটি সংরক্ষণ করছেন না , বরং আপনি সম্পাদনা করছেন এমন ফাইলের বিষয়বস্তু ওভাররাইট করার জন্য আপনি একটি বাহ্যিক প্রোগ্রামকে কল করছেন। এই কারণেই আপনি ভিমের কাছ থেকে একটি সতর্কতা পাবেন:

W12: Warning: File "xxx" has changed and the buffer was changed in Vim as well
See ":help W12" for more info.
[O]K, (L)oad File: 

আপনি এটি একটি ফাংশনে রূপান্তর করতে পারেন:

fun! SuperWrite()
        write !sudo tee %
        " Or with :silent (but that doesn't seem to work for everyone)
        "silent write !sudo tee %
        edit!
endfun

এবং কীবাইন্ড:

nnoremap <Leader>w! :call SuperWrite()<CR>

এর সাথে su, কেবলমাত্র রুট ব্যবহারকারীরা -cতত্ক্ষণাত কমান্ড কার্যকর করতে ব্যবহার করতে পারেন । আপনি এটি করতে ব্যবহার করতে পারবেন বলে আমি মনে করি না su, তবে সম্ভবত এমন কোনও কৌশল আছে যা সম্পর্কে আমি অজানা ...


SuperWriteকাজ করে, তবে এটি আপনার কাছে ফাইলটির প্রতিধ্বনি দেয়। এটি চালানো :silentআপনি অদৃশ্যভাবে আপনার পাসওয়ার্ডটি প্রবেশ করেছেন।
ট্যাঙ্কোরস্যামশ

@ ট্যানকোরস্যামস ধন্যবাদ; আপডেট উত্তর। "অদৃশ্যভাবে আপনার পাসওয়ার্ড লিখুন" দিয়ে আপনি কী বোঝছেন তা নিশ্চিত নন, যদিও? যোগ silentকরা ভাল কাজ বলে মনে হচ্ছে ?
মার্টিন টর্নয়েজ

আমি সুডোর সাথে ভিম চালাই না, যাতে এটি এখানে খেলতে পারে তবে আমি যখন ফাইলটি সুডোতে যাই, এটি আমাকে সুডো পাসওয়ার্ডের জন্য অনুরোধ করে। যদি এটি নিরব থাকে, আমি প্রম্পটটি দেখতে পাচ্ছি না, তবে এখনও একটি পাসওয়ার্ড প্রবেশ করানো দরকার।
ট্যাঙ্কোরস্যামশ

1
আপনি যা দেখছেন তা টি-র স্ট্যান্ডআউটের প্রতিদ্বন্দ্বীকরণের সাথে সাথে দেওয়া ফাইলটির মানক কার্যকারিতা। একটি সমাধান stdout / dev / নাল, একটি লা পুনঃনির্দেশিত করা: w ! tee % > /dev/null এটি এখনও কমান্ড (একক লাইন) এর ফলাফল প্রতিধ্বনিত হবে, কিন্তু পুরো বাফার সামগ্রী নয়।
জন কার্টার

এর পরিবর্তে teeএর আউটপুটটি ফেলে দেওয়ার পরিবর্তে , catআপনি যদি ফাইলটি মুদ্রণ করতে না চান তবে কি কাজ করবে না ?
মিথ্যা রায়ান

12

আমি আমার .vimrc এ নিম্নলিখিত ম্যাপিং ব্যবহার করি, যা আমি দরকারী বলে মনে করি:

cnoremap w!! w !sudo tee %

এটি মনে রাখা সহজ, কারণ w"লিখুন," w!হ'ল "ফোর্স রাইট," এবং w!!এটি "সুপার-ডুপার-ফোর্স রাইটিং"। : P: P


1
আমি দীর্ঘদিন এটিতে ম্যাপিং করেছি W, তবে w!!আরও বেশি অর্থবোধ করে, আমার .vimrc আপডেট করবে। ধন্যবাদ
জুলানব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.