ভিমের ভিতর থেকে মূল হয়ে উঠছে


72

কখনও কখনও আমি /etcভিএম ব্যবহার করে কনফিগারেশন ফাইলগুলি সম্পাদনা sudoকরতে শুরু করি তবে ভিম শুরু করতে ব্যবহার করতে ভুলে যান । তারপরে অনিবার্য ফলাফলটি হ'ল আমার সম্পাদনাগুলি শেষ করার পরে আমি ভয়ঙ্কর নোটিশের মুখোমুখি হয়েছি যে আমার কাছে ফাইলটি সংরক্ষণ করার অনুমতি নেই।

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

তবে আমি নিশ্চিত sudoযে পরিবর্তনগুলি বাতিল না করেই ভিমের অভ্যন্তর থেকে রুট হওয়ার বা ব্যবহারের আরও সহজ উপায় আছে । পদ্ধতিটি যদি sudoব্যবহারকারীর জন্য সেট আপ হওয়ার উপর নির্ভর না করে তবে আরও ভাল।


1
আমি সমস্ত অ্যাডমিন সম্পাদনার sudoeditপরিবর্তে ব্যবহার করার অভ্যাসে পড়েছি vim। এই সমস্যাটি আর কখনও চালাবার এক উপায় নয় :)। গিলসের উত্তরের জন্য +1 ।
jw013

এসও থেকে এই সতর্কতামূলক প্রশ্নোত্তর এগুলি এখানে লিঙ্ক করার জন্য দরকারী: vi এর কোনও ফাইলে কোনও রুটের অনুমতি নেওয়া? & ভিএম "সুডো দিয়ে লিখুন" কৌশলটি কীভাবে কাজ করে?
slm

উত্তর:


46

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

:w !sudo dd of=%

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


2
এটি একটি আকর্ষণীয় সমাধান, তবে আপনি সেই পথটি প্রতিস্থাপন করতে পারেন %, যা আপনি বর্তমানে সম্পাদনা করছেন এমন ফাইলের পথ হবে im
রিড করুন

%ফাইলনামে একটি স্থান রয়েছে এমন ক্ষেত্রে আপনার উদ্ধৃতিগুলি মোড়ানো উচিত ।
intuited

এছাড়াও: এটি 'modified'সেটিংসটি পুনরায় সেট করবে না ; আপনি ম্যানুয়ালি দিয়ে এটি করতে পারেন set nomodified
intuited

2
আসলে, যদি সত্যিই সতর্কতা অবলম্বন করা আবশ্যক করতে চাই, আপনাকে যা করতে হবে exec 'w !sudo dd of=' . shellescape(expand('%'))ফাইলের নাম কোট, ব্যাকস্ল্যাশ ডলারের নির্দেশ ইত্যাদি রয়েছে ক্ষেত্রে
intuited

প্লেনের মাধ্যমে কমান্ডলাইনফু-কম্যান্ডের থেকে কীভাবে আলাদা?

36

ফাইলটিকে মূল হিসাবে সংরক্ষণ করা হচ্ছে:

: w! সুডো টি%


13

sudoeditরুট হিসাবে ফাইল সম্পাদনা করার জন্য কল করুন ।

vimকোনও সম্ভাব্য বিপজ্জনক কিছু করার ক্ষেত্রে আপনি খুব নৈমিত্তিক হচ্ছেন এমন সতর্কতা হিসাবে সরাসরি কল করার সময় অসুবিধার কথা চিন্তা করুন ।


8

আপনি এটি আপনার মধ্যে রাখতে পারেন .vimrc

cmap w!! %!sudo tee > /dev/null %

আপনি এটি করে ট্রিগার করেছেন :w!!- এটি ফাইলটিকে sudo teeবর্তমান ফাইল নাম ( %) এর মাধ্যমে সরিয়ে দেবে ।

Https://stackoverflow.com থেকে


এবং যদি আপনি আরও ব্যবহারকারীর ইনস্টল পেয়ে থাকেন তবে কেবল !sudo sponge %পরিবর্তে ব্যবহার করুন।
তোয়ো

3

এটিও ভাল কাজ করে:

:w !sudo sh -c "cat > %"

এটি এই উত্তরে @ নাথান লং-এর মন্তব্যে অনুপ্রাণিত ।

বিজ্ঞপ্তি :

"পরিবর্তে অবশ্যই ব্যবহার করা উচিত 'কারণ আমরা %শেল যাওয়ার আগে প্রসারিত হতে চাই ।

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