केवल फ़ाइल पढ़ने के लिए परिवर्तनों को अवरुद्ध करना


14

एक रीड ओनली फाइल को संपादित करने के लिए विम का उपयोग करते समय यह सिर्फ एक चेतावनी प्रदान करेगा जो पहली बार संपादित किया गया है लेकिन किसी भी बदलाव को करने की अनुमति देता है। मैं समझ सकता हूं कि यह व्यवहार किसी ऐसे व्यक्ति के लिए उपयोगी हो सकता है जो फ़ाइल को किसी अन्य नाम के तहत सहेजना चाहता है; लेकिन मैं कभी-कभी ऐसी फाइलें खोलता हूं, जिन तक मेरी पहुंच नहीं होती, फिर भूल जाते हैं और बदलाव करते हैं।

क्या ऐसा मोड दर्ज करना संभव है, जहां विम फ़ाइल को देखने की अनुमति देगा लेकिन परिवर्तन करने वाले किसी भी विकल्प को ब्लॉक कर सकता है?

जवाबों:


13

मुझे एक उपाय मिला। सेटिंग nomodifiableफ़ाइल को संपादित करने से रोकती है (जैसा कि सहायता विंडो में उपयोग किया जाता है)। modifiableयदि readonlyसेट किया गया है और इसे किसी ऑटोकैड में संलग्न किया गया है, तो उसके आधार पर सेट करने या परेशान करने के लिए मैंने एक साधारण फ़ंक्शन बनाया ।

" Don't allow editing of read only files
autocmd BufRead * call RONoEdit()

function! RONoEdit()
  if &readonly == 1
    set nomodifiable
  else
    set modifiable
  endif
endfunction

4
आप इसे कम करके कर सकते हैं:let &modifiable = !&readonly
मार्टिन टूरनोइज

@Carpetsmoker एक लाइनर के रूप में बहुत बेहतर है, धन्यवाद! हालाँकि यह अभी भी होगा: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard

इसके साथ, एक readonlyफ़ाइल खोलने और फिर एक नया बफर बनाने के बाद नया बफर समाप्त होता है nomodifiable
प्रिक्सोलिटिक

उस ओर इशारा करने के लिए धन्यवाद, मैंने ध्यान नहीं दिया था। मुझे यकीन नहीं है कि एक नए बफर के लिए परीक्षण कैसे करें।
ZeroKelvinKeyboard

1
@Praxeolitic: मैंने अभी एक उत्तर पोस्ट किया है जो इसे संबोधित करना चाहिए, मुझे पता है कि क्या यह काम करता है।
s4y

7

इसे अपने .vimrc में जोड़ें:

autocmd BufRead * let &l:modifiable = !&readonly

यह केवल वर्तमान बफ़र को प्रभावित करने के लिए @ ZeroKelvinKeyboard के उत्तर पर बनाता है।
21

0

जब तक ऊपर दिए गए उत्तर सही हैं, तब तक एक और बात ध्यान में रखना चाहिए: जब तक फ़ाइल "केवल पढ़ने के लिए" है, तब तक फ़ाइल की सामग्री को बदलने का कोई तरीका नहीं होना चाहिए जब तक आप फ़ाइल के स्वामी या उस फ़ाइल को लिखने योग्य बनाने का अधिकार है। और फिर भी विम फ़ाइल में परिवर्तन नहीं लिखता है जब तक कि आप स्पष्ट रूप से "रीड-ओनली" स्थिति को ": w" द्वारा ओवरराइड नहीं करते हैं।

यदि आप वास्तव में एक फाइल को संपादित कर सकते हैं, जिसे केवल पढ़ने के लिए माना जाता है, तो आप अधिकारों को पुन: जाँचना चाह सकते हैं, एक सुरक्षा ग़लतफ़हमी हो सकती है। यदि आप केवल फ़ाइल को संपादित करने में असमर्थ बनाते हैं, तो संपादन के अन्य तरीके अभी भी लागू होंगे इसलिए यदि फ़ाइल को बदलना नहीं है, तो उसके पास ठीक से सेट होने वाले अधिकार होने चाहिए। विंडोज़ में, आप फ़ाइल को केवल सभी के परिवर्तन को स्पष्ट रूप से अस्वीकार करके केवल पढ़ने के लिए बाध्य कर सकते हैं, लिनक्स में आप "अपरिवर्तनीय" विस्तारित विशेषता (चैटट्रे + आई) का उपयोग कर सकते हैं।


2
क्षमा करें यदि मैं बहुत स्पष्ट नहीं था। यह प्रश्न गलती से केवल पढ़ने वाली फ़ाइल को बदलने के बारे में नहीं था; मैं अपने आप को उस फ़ाइल के बफर को संपादित करने में सक्षम होने से रोकना चाहता था जिसके लिए मेरे पास लिखने की पहुंच नहीं थी। कभी-कभी मैं गलती से रूट यूजर के बजाय एक नियमित उपयोगकर्ता के रूप में सिस्टम कॉन्फ़िगरेशन फ़ाइलों को खोल देता हूं। इस मामले में मेरे पास फ़ाइल तक पहुंच नहीं है, इसलिए बफर केवल पढ़ने के लिए दिखाई देता है लेकिन विम अभी भी मुझे बफर को संपादित करने की अनुमति देगा। जब मैं बचाने की कोशिश करता हूं तो मैं नहीं लिख सकता क्योंकि मेरे पास पहुंच नहीं है। मैं चाहता था कि विम इस मामले में बफर में बदलाव को रोक दे।
ZeroKelvinKeyboard

ओह समझा। मुझे यह विचार आया कि आप इसे एक असफल के रूप में चाहते थे। मेरे उत्तर की
अवहेलना करें

ओपी का मतलब है कि जब कोई ओएस में केवल-रीड-ओनली फाइल नहीं खोलता है, लेकिन वह वर्तमान में बदलाव नहीं करना चाहता (या उपयुक्त मानते हैं) और खुद को प्रतिबंधित नहीं करना चाहता है। मैं बिलकुल वैसा ही सोच रहा हूँ, इस प्रकार गूगल से यहाँ जा रहा हूँ!
वायोलिक्टेरिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.