विम से स्क्रिप्ट बैश


21

मैं बैश स्क्रिप्टिंग के लिए विम का उपयोग करता हूं। बात यह है कि कभी-कभी मैं एक नई फ़ाइल नहीं बनाना चाहता, इसे निष्पादन योग्य बनाता हूं, इसे निष्पादित करता हूं और फिर इसे हटा देता हूं। मेरा मतलब उन लिपियों से है जो केवल एक बार इस्तेमाल होने वाली हैं।

उदाहरण के लिए मैं विम खोलता हूं और इसे टाइप करता हूं:

#!/bin/bash

ll | while read line
do
    echo $line
done

मैंने इस फाइल को सेव नहीं किया है, मैं बस बैश-स्क्रिप्टिंग को सरल बनाने के लिए विम का उपयोग करता हूं। मुझे पता है कि मैं !vim के माध्यम से bash कमांड निष्पादित कर सकता हूं । लेकिन उस सब को निष्पादित करने के बारे में क्या है जो बफर में है?


4
आप जानते हैं कि आप वर्तमान कमांड-लाइन को विम में संपादित कर सकते हैं <C-x><C-e>और इसे राइट, राइट पर निष्पादित कर सकते हैं?
20

यदि आप इस विकल्प के साथ बैश चलाते हैं set -o vi, तो आप Esc-vvi में कमांड लाइन को संपादित करने के लिए हिट कर सकते हैं । फिर Esc-:wqअमल करना।
रोबोल्टिक

जवाबों:


35

मैंने स्टैक-ओवरफ्लो पर इस बारे में बहुत व्यापक उत्तर लिखा । मूल विचार है कि चूंकि लिखने आदेश के बारे में है लिख नहीं बचत , आप अपने बफर में पाठ एक बाहरी कार्यक्रम में इस तरह के अजगर या बैश के रूप में लिख सकते हैं,। आपके मामले में, आप कुछ ऐसा करना चाहेंगे:

:w !bash

या

:w !sh

ये आदेश शाब्दिक रूप से आपके द्वारा निर्दिष्ट कार्यक्रम में सीधे आपके बफर में पाठ लिखते हैं !, जो सुविधाजनक है क्योंकि तब आपको किसी फ़ाइल को सहेजने की आवश्यकता नहीं है। बेशक, आप भी कुछ ऐसा कर सकते हैं:

:w | !bash %

जो आपकी फ़ाइल को बचाता है और फिर इसे बैश स्क्रिप्ट के रूप में चलाता है। आप इनमें से जो भी आपके लिए ज्यादा मायने रखता है, चुन सकते हैं।


क्या इस तरह विकल्पों को तर्क प्रदान करने का एक तरीका है? मैंने कोशिश की, :w !bash -a testलेकिन "बाइनरी फ़ाइल निष्पादित नहीं कर सका"
सेंट एंटारियो

@ सेंटऑनारियो हम्म। मुझे यकीन है कि कोई रास्ता अवश्य होगा, लेकिन मेरी बैश बहुत जंग लगी है (मैं ज्यादातर विंडोज़ का उपयोग करता हूं)। जब मैं एक खाली testफाइल के साथ साइबरविन में कोशिश करता हूं , तो यह मेरे लिए ठीक है। कमांड को क्या करना चाहिए, और testइसमें क्या होना चाहिए ?
DJMcMayhem

मेरा वास्तविक मामला बहुत जटिल है, इसलिए इसे केवल बीटीडब्ल्यू पास किए गए तर्क को प्रिंट करने दें, आपका क्या मतलब है test जिसमें क्या होना चाहिए ? testसिर्फ एक तर्क है -a
सेंटएन्टारियो

1
@ सेंटऑनारियो ओह, ठीक है मैं देख रहा हूं। मुझे लगा कि testएक फाइल बनना है। मुझे यकीन नहीं है कि मुझे क्या करना है। यदि आप कुछ जटिल की कोशिश कर रहे हैं, तो बेहतर होगा कि इसे किसी फ़ाइल में सहेजा जाए। यह एक अलग प्रश्न के रूप में पूछने के लायक हो सकता है ताकि आप अधिक विवरण प्रदान कर सकें। यह शायद यह भी के लिए एक अच्छा सवाल होगा यूनिक्स और लिनक्स
DJMcMayhem

4

परिदृश्य: आप बैश शेल में काम कर रहे हैं। सबसे पहले, सुनिश्चित करें कि स्थानीय संपादन मोड vi है:

$ set -o vi

अब, जब आप अपने आप को निम्न जैसे लंबे कमांड पर काम करते हुए पाते हैं, तो हिट Esc+ v

$ fjhwfq this is my long command

यह आपकी कमांड को एक अस्थायी viसत्र में लोड करेगा । अब आप इसे अपनी इच्छानुसार संपादित कर सकते हैं, और यहां तक ​​कि एक और कमांड जोड़ सकते हैं ...

fjhwfq some long command
ls -l

जब आपने संपादन समाप्त कर लिया है, तो टाइप करें Esc :wqऔर कमांड को निष्पादित किया जाएगा, उदाहरण के लिए:

$ fjhwfq some long command
fjhwfq some long command
bash: fjhwfq: command not found
ls -l
total 44
-rw-r--r-- 1 ropata Domain Users 24073 Nov 10 14:17 _viminfo
drwxr-xr-x 1 ropata Domain Users     0 Jul 15 13:57 bin/
-rw-r--r-- 1 ropata Domain Users   956 Nov  7 10:43 custom_env

3
यदि आप एक के बिना एक नया मैकबुक है काम नहीं कर सकते Esc); कुंजी
roblogic

1
नई मैकबुक में Escचाबी नहीं है !? फिर वे विम का उपयोग कैसे कर सकते हैं?
हुब्रो

1
अब मैं इसे की कोशिश की है, thingy touchbar नई मैकबुक करता है एक दिखाने के Escलिए जब एक टर्मिनल में विम चल कुंजी।
लुटेरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.