অনুমতি ছাড়াই খুললে কোনও ফাইল সম্পাদনা করার জন্য জোর করে ভিএম ব্যবহার করা Using


51

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

এটির জন্য কি কোনও পরিকল্পনা রয়েছে? আমি কি কেবল ফাইলের পঠন স্থিতি থাকা সত্ত্বেও ফাইলটিতে পরিবর্তনগুলি বাধ্য করতে পারি? আমি কি কমপক্ষে পরিবর্তনগুলি সংরক্ষণ করতে পারি, একটি ডিফ চালাতে পারি এবং ফাইলগুলিকে একত্রে মার্জ করতে পারি?


3
এই প্রশ্নের ইতিমধ্যে এখানে উত্তর দেওয়া হয়েছে বলে মনে হচ্ছে: stackoverflow.com/questions/1005/…
শরৎ

আমার ক্ষমা। আমি সেই সাড়া পাইনি। ধন্যবাদ.
andor kesselman

3
[সুডো ট্রিক দিয়ে ভিম লেখার জন্য] ব্যবহার করুন [1]: ডাব্লু! সুডো টি% [1]: স্ট্যাকওভারফ্লো
প্রশ্নগুলি / 2600783/…

উত্তর:


81

আপনার বর্তমান সমস্যার উপর নির্ভর করে কিছু আলাদা পদ্ধতির উপস্থিতি রয়েছে:

  1. কেবলমাত্র vi দ্বারা আপনার ফাইল যদি :set readonlyআপনি করতে পারেন
    • ব্যবহার করুন :w!বাহিনী লিখতে, অথবা
    • ইস্যু করুন :set noreadonlyএবং তারপরে কেবল সাধারণ ব্যবহার করুন:w
  2. একটি অনুমতি সমস্যা ( sudo ): আপনি লিখতে পারবেন না তবে আপনার sudo অধিকার রয়েছে।
    • ইস্যু: :w !sudo tee %। এটি বাফারকে লিখবে tee, একটি কমান্ড যা পাইপের তথ্য গ্রহণ করে এবং ফাইলগুলিতে লিখতে পারে। এবং টি সুডো শক্তি দিয়ে চালিত হওয়ার সাথে সাথেই টি ফাইলটি সংশোধন করতে পারে।
  3. একটি অনুমতি সমস্যা ( কোনও sudo নয় ): আপনার কাছে ফাইলটি লেখার অধিকার নেই এবং আপনার প্রশাসকের অ্যাক্সেস নেই।
    • ব্যবহার করুন :w! ~/tempfile.extএকটি অস্থায়ী ফাইল আপনার পরিবর্তনগুলি লিখুন এবং তারপর নির্দেশিকাতে টেম্প ফাইল স্থানান্তর করতে ব্যবস্থা গ্রহণ (ডিরেক্টরি মালিক / প্রশাসক থেকে টেম্প ফাইল পাঠাতে)।

আপনি এখানে এটি সম্পর্কে আরও পড়তে পারেন:

  1. স্ট্যাকওভারফ্লো থেকে
  2. গীকিবয়ের কাছ থেকে
  3. ডেটা আগারিক থেকে

শর্টকাট

যেহেতু প্রায়শই এটি সমস্যা হয় # 2 ( অনুমোদনের সমস্যা, সুডোর সাথে ), আপনি নীচের শর্টকাটটিতে নিজের /etc/vim/vimrc(বা ~/.vimrc) করতে পারেন :

  • cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit!

তারপরে আপনি কেবল sudo শক্তি :w!!দিয়ে সংরক্ষণ করতে টাইপ করতে পারেন । আমি এখানে এটি ব্যাখ্যা করব না তবে উপরের রেফারেন্সগুলিতে অনেকগুলি শর্টকাট রয়েছে।


1
এবং আপনার বেনামে যেমন আমি স্রেফ নেক্রোম্যান্সার ব্যাজ অর্জন করেছি! ধন্যবাদ! আমি এখন মুরডোরকে ডিফেন্ড করার মতো অনুভব করছি। ;)
ডাঃ বেকো

5

আমি এটি করার দুটি উপায় সম্পর্কে ভাবতে পারি।

প্রথম উপায়টি ধরে নিয়েছে যে আপনার নিজেরাই এই ফাইলটির মালিক, তবে ফাইলটি কেবলমাত্র প্রস্তুত।

আপনার নিজস্ব READONLY ফাইলের ওভাররাইটিংকে জোর করে লিখতে কমান্ড (: w!) তে কেবল vi এর উদ্দীপনা চিহ্ন প্রত্যয়টি ব্যবহার করুন। এটি অবশ্যই ধরে নিয়েছে যে আপনার বর্তমান ফোল্ডারে লেখার এবং সম্পাদনের অনুমতি রয়েছে।

:w!

vi এর ফলে মূল READONLY ফাইলটি ওভাররাইট করা হবে।

দ্বিতীয় উপায়টি ধরে নিয়েছে যে অন্য কেউ এই ফাইলটির মালিক, এবং আপনি সেই ফাইলটিতে আপনার পরিবর্তনগুলি সংরক্ষণ করতে চান।

এটি সম্পাদনের একটি উপায় হ'ল মূল ফাইলটিতে সম্পাদিত পরিবর্তনগুলি vi এর মধ্যে থেকে এডি স্ক্রিপ্ট হিসাবে সংরক্ষণ করা। এই এডি স্ক্রিপ্টটি অ্যাড লাইন সম্পাদক সহ vi এর বাইরে পরবর্তী সময়ে মূল ফাইলটিতে (বা অন্যান্য অনুরূপ ফাইলগুলি) প্রয়োগ করা যেতে পারে।

এডি স্ক্রিপ্ট হিসাবে বর্তমান সম্পাদনা সেশনটি সংরক্ষণ করার একটি উপায় হ'ল আসল ফাইলের নাম এবং সম্পাদিত ভিআই বাফারকে --ed কমান্ড লাইন সুইচের সাথে পৃথক ইউটিলিটি হিসাবে স্ট্যান্ডার্ড ইনপুট হিসাবে ইডি স্ক্রিপ্ট হিসাবে প্রদর্শন করুন pass

সুতরাং, সম্পাদিত ভিআই বাফার ধরে ধরে নিচের কাজগুলি সম্পাদন করুন

:.,$!diff --ed [original_file] -

এটি বর্তমান বাফারের সমস্ত রেখাকে (।, $!) প্রতিস্থাপন করে পৃথক উত্পন্ন এডি স্ক্রিপ্টের সাথে (ডিফ - - [মূল [ফাইলে] -) মূল ফাইলটিকে বর্তমান বাফারের সামগ্রীতে রূপান্তর করতে প্রয়োজনীয়। এরপরে আমরা এই এডি স্ক্রিপ্টটি কোনও নিরাপদ স্থানে সংরক্ষণ করতে এবং স্ক্রিপ্টটি মূল ফাইলের সংস্করণে প্রয়োগ করতে পারি যা আমরা লিখতে পারি। সুতরাং, স্ক্রিপ্টটি কোনও লিখনযোগ্য স্থানে সংরক্ষণ করুন, উদাহরণস্বরূপ, আপনার লগইন ফোল্ডার:

:w ~/my_ed_script

এখন vi থেকে প্রস্থান করুন এবং সম্পাদিত ফাইলটি পাওয়ার জন্য এই এডি স্ক্রিপ্টটি ব্যবহার করুন যা প্রথম স্থানে সংরক্ষণ করা যায়নি। বাশ কমান্ড লাইন প্রম্পট থেকে এটি কীভাবে সম্পাদন করা যায় তা এখানে '' ':

$ (cat ~/my_ed_script && echo 'w') | ed - writable_copy_of_original_file

এই কমান্ড সিকোয়েন্সটি কথায় যা করে তা হ'ল আমরা স্ক্রিপ্টটি কেটেট করে আলাদা করে তৈরি করি এবং এড রাইট কমান্ড, 'ডাব্লু' এর প্রতিধ্বনিত করে এডের স্ট্যান্ডার্ড ইনপুটটিতে প্রতিধ্বনিত করি। এড তারপরে এই স্ক্রিপ্টটি মূল ফাইলের লিপিযোগ্য অনুলিপিটিতে প্রয়োগ করে এবং সেই পরিবর্তিত বাফার পরিবর্তনগুলি ফাইলটিতে ফিরে লেখেন।

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


1

কোনও ফাইল লেখার অনুমতি নেই যখন কেবল কেসটি কভার করতে চান।

:!chmod +w %
:w!

এর মধ্যে ভিমে ফাইলের পরিবর্তনের বিষয়ে অভিযোগ করবে (পতাকা পরিবর্তনের কারণে) - এগুলিকে এড়িয়ে যাওয়া অবশ্যই নিরাপদ


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.