पाइप का उपयोग करके विम में एक फ़ाइल कैसे खोलें


15

मुझे locateकमांड का उपयोग करने के लिए बहुत बार मिलता है।

तो अगर मैं निम्नलिखित कमांड चलाता हूं।

locate updatedb | head -1

फिर यह मुझे देता है O/p

/usr/updatedb.conf

मुझे आश्चर्य है कि क्या कोई ऐसी कमांड है जो मुझे सीधे उस फाइल को खोलने दे सकती है?

मैं कुछ इस तरह की उम्मीद कर रहा हूं।

locate updatedb | head -1 | vim

जवाबों:


22

आप लगभग पूरा हो चुके हैं:

$ locate updatedb | head -1 | xargs vim

कभी-कभी (कुछ टर्मिनलों के तहत) आपको संपादन के बाद टर्मिनल को रीसेट करने की आवश्यकता होती है।

$ reset

2
शायद आपके locateपास -l/ --limit/ -nविकल्प का सबसे अधिक संस्करण है, इसलिए आपको इसकी आवश्यकता नहीं है head -1:locate -n 1 updatedb | xargs vim
दिमित्री अलेक्जेंड्रोव

1
यह टर्मिनल भ्रष्टाचार क्यों होता है? क्या इससे बचने का कोई उपाय है?
जैकबो डे वेरा

16

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

vim "$(locate updatedb | head -1)"

तुम भी backticks का उपयोग कर सकते हैं, और वह भी विम के अंदर काम करता है:

:edit `locate updatedb | head -1`

यह रिक्त स्थान के साथ तार पर भी काम करता है, जो फ़ाइल नामों के लिए अच्छा है जैसे "संस्करण 2 - final.csv"।
एलेक्स मूर-नीमी

0

मुझे पता है कि यह बुरा समाधान है लेकिन मैंने इसका उपयोग .bashrc में उपनाम बनाने के लिए किया है:

locate updatedb  > /tmp/vimForTempDontTouch && vim /tmp/vimForTempDontTouch

डाउनसाइड्स: बदसूरत

फायदा: टर्मिनल के साथ कोई साइड इफेक्ट नहीं

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