Vi के अंदर बैश कमांड


33

क्या vi के अंदर बैश कमांड टाइप करना और स्टैडआउट प्राप्त करना संभव है?

मुझे यह अक्सर बंद होने और फिर से खोलने के लिए थकाऊ लग रहा है क्योंकि मैं खोल में कुछ देखना चाहता हूं।

जवाबों:


45

यदि आप करना चाहते हैं तो हाँ, lsप्रयास करें:

:!ls

शेल खोलना, उपयोग करना

:shell


भयानक, मैं इसके बिना कैसे रह सकता था?
वीर

3
वास्तव में कुछ मैं अक्सर कुछ संपादन करते समय vi को जड़ के रूप में चलाना भूल जाता हूं। इस कमांड ने मुझे लंबे समय तक पुनर्लेखन से बचाया है जितना मैं याद रख सकता हूं। :w !sudo tee %
मार्क डी।

1
काश, ग्नू में ऐसा करने के कुछ तरीके होतेnano
ixtmixilix

1
और फिर आप संपादक का उपयोग करने के बाद वापस कैसे जाते हैं: शेल?
19

@VaTo: वापस जाने के लिए, आप टाइप कर सकते हैं: बाहर निकलें
रमन कठपालिया

12

मैं ctrl+zvi का उपयोग करने के लिए सोता हूं, जो मुझे शेल में चाहिए, उसे चलाएं, fgफिर vi को फिर से शुरू करने के लिए। आपके प्रश्न का उत्तर बिल्कुल नहीं है, लेकिन मुझे यह काम करने का बहुत तेज़ तरीका लगता है।

यदि आप भूल जाते हैं कि आपके पास पृष्ठभूमि में vi खुला है (यह तब हो सकता है जब आप व्यस्त हों), जब आप शेल का उपयोग करके लॉग आउट करने का प्रयास करते हैं, तो आपको ctrl+dचेतावनी दी जाएगी कि आपके पास पृष्ठभूमि की नौकरियां चल रही हैं, और आप उन्हें बंद कर सकते हैं, या हिट करने के लिए फिर से लॉग आउट करने के लिए ctrl + d मारा। इसके अलावा, यदि आप एक ही फ़ाइल को दो बार फिर से खोलने की कोशिश करते हैं, तो आपको एक रिकवरी चेतावनी मिलती है, जिससे आप avi पर वापस जाने के लिए गर्भपात, और fg चलाने के लिए दबा सकते हैं।


1
यह चिपचिपा हो सकता है यदि आप कमांड लाइन पर जो कर रहे हैं, उसमें फंस जाते हैं, और भूल जाते हैं कि आपने पृष्ठभूमि को देखा है।
एलियट बॉल

1
हां, यह संभव है, मैंने इसे स्वयं किया है। मेरे लिए यह शेल कांस्टेबिलिटी के लायक है। आपकी टिप्पणी को ध्यान में रखने के लिए मैं अपने उत्तर को अपडेट करूंगा
रकॉमी

1
मुझे लगता है कि आप ग्नू स्क्रीन का उपयोग करना बेहतर होगा।
user606723 15

1
मैं खुद tmux का उपयोग करता हूं ... लेकिन गति के लिए, और अगर tmux या स्क्रीन के बिना सर्वर में लॉग इन किया जाता है, तो यह आसान है
Rqomey

11

चूंकि आपने "स्टडआउट प्राप्त किया" का उल्लेख किया है, ध्यान दें कि आप कर सकते हैं

:r! command

और कमांड का आउटपुट फ़ाइल में जोड़ा जाएगा, या

:<range>!command

श्रेणी की सामग्री को कमांड के माध्यम से फ़िल्टर किया गया है [जैसे :1,$!wc]


:%!commandबहुत उपयोगी लग रहा है
एलियट बॉल

मैं इसका उपयोग अक्सर लाइनों को छांटने के लिए करता हूं [जैसे :.,+20 !sort]
वाल्टर ए

5

मेरा पसंदीदा मुहावरा है

!!command

जिसके लिए आशुलिपि है

:.!command

जो कमांड के माध्यम से करंट लाइन को पाइप करता है और आउटपुट को फाइल में इंसर्ट करता है। मेरे लिए सबसे आम मामला vi के साथ कमांड को संपादित करना और चलाना है:

!!sh

या

!<motion>command

जैसे (उदाहरण के लिए)

!apsh

शेल के माध्यम से पूरे वर्तमान पैराग्राफ को चलाने के लिए।


2
नोट करें कि !}आपको पैराग्राफ की शुरुआत में तैनात होना है, कोशिश करें !ap। (मुझे नहीं पता कि यह हर vi या केवल vim में है)
random832

4

बृहदान्त्र और विस्मयादिबोधक बिंदु का उपयोग करके आप शेल पथ और शेल स्क्रिप्ट में किसी भी कमांड को चला सकते हैं, ध्यान रखें कि कमांड vi / vim प्रोग्राम चलाने वाले उपयोगकर्ता के तहत चलता है, और यह पर्यावरण का उपयोग कर रहा है।

:!<command>

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


4

आप कमांड का आउटपुट देख सकते हैं, उदाहरण के लिए, :!ls -lhकमांड मोड में।

यदि आप जिस फ़ाइल को संपादित कर रहे हैं, उसमें कमांड का आउटपुट डालना चाहते हैं, तो बस जोड़ें r। उदाहरण के लिए, :r!which perl


1

उपयोग करना !स्पष्ट रूप से सही उत्तर है, लेकिन यदि आप बार-बार स्विच कर रहे हैं, तो स्क्रीन या tmux जैसी कोई चीज़ भी उपयोगी हो सकती है।


0

मेरे पास मेरे .vimrc में है। कुछ समय पहले स्टैक ओवरफ्लो पर मिला:

" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>

0

मैं दो टर्मिनल कमांड लाइन की खिड़कियां खोलकर, एक में वीआई चला रहा हूं और एक ही समय में अन्य काम के लिए उपलब्ध है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.