गैरी बर्नहार्ट की तरह विम के अंदर शेल कमांड कैसे चलाएं?

Dec 13 2020

मैं गैरी बर्नहार्ट के सभी सॉफ्टवेयर स्क्रैनास्ट को नष्ट कर रहा हूं , विशेष रूप से स्क्रैच से एक कंपाइलर । वहां, वह विम को छोड़े बिना शेल कमांड चलाता है। मुझे लगभग यकीन है कि वह सिर्फ 1 मिनट के निशान पर सामान्य विम सिंटैक्स का उपयोग कर रहा है :!chmod u+x compiler.rb:। यदि मैं अपने कंप्यूटर पर ऐसा करता हूं, तो विंडो शेल कमांड को निष्पादित करने के लिए स्विच हो जाएगी और फिर मुझे एंटर पर वापस जाने के लिए एंटर को प्रेस करना होगा। यह है, मुझे लगता है, विम के लिए सामान्य व्यवहार, और अन्य लोगों ने पहले भी यह पूछा है , लेकिन मुझे नहीं लगता कि कोई भी जवाब उन चीजों को करता है जिस तरह से गैरी करता है।

मैंने उनकी .vimrcफ़ाइल को देखा , विशेष रूप से स्क्रेंकास्ट के अपलोड होने से पहले अंतिम संस्करण, लेकिन यह पता नहीं लगा सका कि जिस व्यवहार को मैं देख रहा था उसे प्राप्त करने के लिए वह क्या बदल सकता है। मैंने इसे डाउनलोड किया लेकिन मुझे अभी भी सही व्यवहार नहीं मिल रहा है, इसलिए मैं स्पष्ट रूप से कुछ याद कर रहा हूं। उसका कोई भी प्लग-इन इससे संबंधित नहीं लगता है, इसलिए मैंने ज्यादातर उनकी अनदेखी की है।

मैं लगभग लगता है कि मैं एक समाधान के लिए चीजों को इस तरह के रूप नहीं देख रहा हूँ कि का उपयोग करता है tmux, या कर रहा हूँ :split, :term, :below terminal, या :silent। और न ही मैं एक उत्तर की तलाश कर रहा हूं जो विम के अलावा कुछ और का उपयोग करता है, मेरा मानना ​​है कि गैरी सिर्फ विम और कुछ प्लगइन्स का उपयोग कर रहा है।

मैंने गैरी के पेंचकस देखे, जहां वह विशेष रूप से विम के बारे में बात करता है, लेकिन उसने इस प्रश्न को संबोधित नहीं किया (या मैं इसे पकड़ नहीं पाया), इसलिए अगर किसी को पता चला है कि :! <shell command>पाठ संपादक को छोड़ने के बिना कैसे उपयोग किया जाए, तो मैं वास्तव में इसकी सराहना करूंगा आप मुझे यह काम करने में मदद कर सकते हैं। मैंने उन विकल्पों का परीक्षण किया है जिनका मैंने मैक और लिनक्स पर दोनों से पहले उल्लेख किया है, लेकिन कुछ भी काम नहीं किया है कि मैं इसे कैसे पसंद करूंगा, और मैं एक समाधान के साथ खुश रहूंगा जो किसी भी मंच पर काम करता है।

जवाब

3 filbranden Dec 13 2020 at 12:02

वीडियो जल्दी से चला जाता है, लेकिन मैंने इसे रोक दिया है और मुझे लगता है कि उसे निम्नलिखित टाइप करते देखा गया है:

:!chmod u+x %

जो तब इस उत्पादन का उत्पादन करता है:

:!chmod u+x compiler.rb
[No write since last change]
"compiler.rb" 5L, 42C
Press ENTER or type command to continue

तो, वास्तव में, विम करता है "प्रेस ENTER" के बाद आदेश पूरा हो गया है शीघ्र, लेकिन यह वह यह इतनी जल्दी दबाया लगता है (शायद वह यह पहले से ही उम्मीद कर रहा था? या हो सकता है वह निम्न कमांड दबाने? शुरू कर दिया) ऐसा लगता है कि उस संदेश था छोड़ दिया।

यहां दो सेटिंग हैं जो प्रासंगिक हैं, पहला कमांड को चलाते समय वैकल्पिक स्क्रीन से स्विच करने से रोकना और दूसरा बाहरी कमांड द्वारा बदल दिए जाने पर फ़ाइल को स्वचालित रूप से पुनः लोड करना (भले ही केवल अनुमतियाँ बदल गई हों।)

उनके GitHub डॉटफाइल्स रिपॉजिटरी को देखते हुए, हम वास्तव में 2017-06-29 (जो कि जब वीडियो प्रकाशित हुआ था) के रूप में vimrc में दोनों सेटिंग्स देख सकते हैं।

  1. वैकल्पिक स्क्रीन से स्विच करने के लिए विम को कॉन्फ़िगर करना इस स्निपेट के साथ कॉन्फ़िगर किया गया है :
" Prevent Vim from clobbering the scrollback buffer. See
" http://www.shallowsky.com/linux/noaltscreen.html
set t_ti= t_te=
  1. इस सेटिंग के साथ किसी बाहरी ऑपरेशन के बाद फ़ाइल को फिर से लोड करने के लिए विम को कॉन्फ़िगर करना :
set autoread

इन दो सेटिंग्स के साथ, मैं लगभग समान रूप से पुन: उत्पन्न कर सकता हूं। ठीक है, सिवाय इसके कि मुझे [No write since last change]संदेश नहीं मिलता है । मुझे वास्तव में यकीन नहीं है कि यह कहां से आ रहा है, क्योंकि मैं बता सकता हूं कि उसने chmodकमांड से ठीक पहले फाइल लिखी थी । (साक्ष्य के रूप में, स्थिति रेखा [+]फ़ाइल के नाम के आगे नहीं दिखाई देती है, जो एक बफर को दर्शाती है जो कि किया गया है)।

शायद यह उनके vimrc से कुछ और है ... सिद्धांत रूप में, इसे GitHub से प्राप्त करना और समान प्रयास करना संभव होना चाहिए। ऐसा लगता है कि वीडियो विम 7.4 का उपयोग कर रहा है, ताकि इसका हिस्सा भी हो सके।

अभी भी अपने GitHub dotfiles रेपो को देखते हुए, ऐसा लगता है कि वह विम को स्क्रॉलबैक बफर को बंद करने की अनुमति देने पर वापस चला गया , इसलिए उसने उस हिस्से पर अपना मन बदल दिया।

यदि वह हिस्सा अभी भी आपकी रुचि रखता है, तो आप प्लग-इन vim-altscreen पर एक नज़र डाल सकते हैं , जो उस व्यवहार को लागू करता है, जिसके चारों ओर कुछ नियंत्रण होते हैं। विशेष रूप से @ user938271 के असाधारण उत्तर पर , "वैकल्पिक स्क्रीन के बीच अंतर :!{cmd}और :w !{cmd}संबंधित प्रश्न " पर चर्चा भी देखें ।