कैसे करता है `: w! सुडो टी%` काम करता है


27

यदि आप कोई ऐसी फ़ाइल खोलते हैं, जिसमें आपको vim लिखने की अनुमति नहीं है, तो तय करें कि आपको इसे बदलने की आवश्यकता है, आप अपने बदलावों को vim से बाहर निकाले बिना लिख ​​सकते हैं, :w !sudo tee %
मुझे समझ नहीं आ रहा है कि यह कैसे काम कर सकता है। क्या आप कृपया इसे विच्छेदित कर सकते हैं?
मैं :wभाग को समझता हूं , यह डिस्क पर वर्तमान बफर लिखता है, यह मानते हुए कि पहले से ही एक फ़ाइल नाम है जो इसके साथ जुड़ा हुआ है, है ना?
मैं यह भी समझता हूं कि !कौन सी sudo teeकमांड निष्पादित करती है और %वर्तमान बफर कंटेंट का सही प्रतिनिधित्व करती है?
लेकिन फिर भी समझ में नहीं आता है कि यह कैसे काम करता है।

जवाबों:


30

संरचना का :w !cmdअर्थ है " कमांड के माध्यम से पाइप किए गए वर्तमान बफर को लिखें "। तो आप कर सकते हैं, उदाहरण के लिए :w !catऔर यह बफर को पाइप करेगा cat

अब %है फ़ाइल नाम बफर के साथ जुड़े

तो के :w !sudo tee %माध्यम से बफर की सामग्री को पाइप करेगा sudo tee FILENAME। यह प्रभावी रूप से फाइल के बफर की सामग्री को लिखता है।


और क्या है tee?
CodyBugstein

7

% वर्तमान बफ़र फ़ाइल नाम का प्रतिनिधित्व करता है, इसकी सामग्री नहीं।

तो :w !sudo tee %इसका मतलब है कि वर्तमान बफर को पाइप करें sudo tee [currentfilename]

tee को रूट के रूप में चलाया जा रहा है, इसलिए फ़ाइल पर अपनी स्टड को सहेजने के लिए पहुंच लिखें।

यह भी देखें /programming/2600783/how-does-the-vim-write-with-sudo-trick-work


2

बिलकुल ठीक नहीं!

!commandएक फिल्टर कमांड के रूप में कमांड चलाता है , जिसे टेक्स्ट मिलता है stdin, कुछ करना और आउटपुट करना stdout

का उपयोग करके w, आप के लिए फ़ाइल की सामग्री धक्का दिया stdinकी sudo tee %%vim में विशेष रजिस्टर है, जो वर्तमान फ़ाइल का नाम रखता है।

तो आपको मिला sudo tee FILENAME, जो tee stdinवर्तमान फ़ाइल में - फ़ाइल सामग्री - को धक्का देगा ।


2
:!commandएक फ़िल्टर (cf. :h !) है, जबकि :w !commandऐसा नहीं है, यह सिर्फ commandवर्तमान फ़ाइल के रूप में stdin(cf. :h :w_c) के साथ निष्पादित होता है । बुद्धि के लिए: :w !sed /./dवर्तमान बफर की सामग्री को नहीं बदलता है। लेकिन नुस्खा वास्तव में एक और कारण के लिए बिल्कुल सही नहीं है, %बचने की आवश्यकता है :exec 'w !sudo tee ' . shellescape(expand('%', 1)):। मूल आदेश, रिक्त स्थान के साथ फ़ाइल नाम के साथ काम नहीं करता है।
सातु कटुरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.