मैं कैसे bash में vim को कमांड आउटपुट रीडायरेक्ट करता हूं?


87

मैं एक bash कमांड के आउटपुट को एक नई फाइल में रीडायरेक्ट करने की कोशिश कर रहा हूं।

अगर मैं नीचे दिए गए पाइप को आजमाऊं:

ls -la | vim

बैश मुझे त्रुटियाँ दिखाता है:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

मुझे पता है कि मैं विम खोल सकता हूं और फिर उपयोग कर सकता हूं:

:r !ls -la

लेकिन क्या बाश में ऐसा करने का कोई तरीका है, ताकि विम खोला जाए और आउटपुट को स्वचालित रूप से वहां चिपकाया जाए?

जवाबों:


140

आप प्रक्रिया प्रतिस्थापन का उपयोग कर सकते हैं (यह उन अनुप्रयोगों के साथ भी काम करता है जो इससे नहीं पढ़ सकते हैं STDIN):

vim <(ls -la)

या vimपढ़ने के लिए फ़ंक्शन का उपयोग करें STDIN:

ls -la | vim -


1
मुझे वास्तव में विम का विकल्प पसंद है, यह मुझे डेटा डंप से आउटपुट को आसानी से खोजने, खोजने और सहेजने की अनुमति देता है।
जोस अलेक्जेंडर इबारा


19

यहाँ एक और दृष्टिकोण है, उम्मीद है कि किसी को कुछ नया सिखाने के लिए।

यदि आप जानते हैं कि कमांड :r !ls -lavim के अंदर काम करता है, तो आप निम्नलिखित को vim खोलने के लिए कर सकते हैं और इसे कमांड को खोलते ही चला सकते हैं, सीधे bash से:

vim -c ':r! ls -la'

यह vimकमांड को निष्पादित करने के बाद खोलने के बराबर है :r! ls -la। यह किसी भी vimकमांड के साथ काम करना चाहिए , जहां -cविकल्प के बाद कमांड आती है ।


12

आप स्टिम खोलने के लिए विम को बता सकते हैं:

ls -la | vim -

1

यदि आपका लक्ष्य बस आउटपुट को एक टेक्स्ट फ़ाइल में प्राप्त करना है, तो आपको विम का आह्वान करने की आवश्यकता नहीं है। बैश यह अकेले के साथ कर सकते हैं

ls -la > outputfile.txt

1

setlocal buftype=nofile

यदि आप एक उपनाम बनाने जा रहे हैं तो यह एक अच्छा विकल्प है less:

seq 100 | vim +':setlocal buftype=nofile' -

अब आपको टाइप करने की जरूरत नहीं है! छोड़ना।

एक अन्य विकल्प है:

seq 100 | vim +'nnoremap q :quit!' -

तो आप बस के साथ बाहर निकल सकते हैं q<enter>


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