आप इसके साथ vim
stdin
और कर सकते हैं stdout
। तुम भी POSIX आज्ञाकारीex
होने के लिए उपयोग कर सकते हैं । के लिए सिर्फ दृश्य विधा है । वास्तव में, आप उपयोग कर सकते हैं के साथ या (सुधार मोड)।
उपयोगी है क्योंकि इसके विपरीत उपकरण जैसे कि यह संपादन के लिए फ़ाइल को बफ़र करता है, जबकि इसका उपयोग स्ट्रीम के लिए किया जाता है। आप उपयोग करने में सक्षम हो सकते हैं , लेकिन आपको एक चर में मैन्युअल रूप से सब कुछ बफर करना होगा।vim
ex
ex
vim -e
vim -E
ex
vim
sed
sed
awk
विचार निम्नलिखित करना है:
- स्टडिन से पढ़ें
- प्रत्येक पंक्ति के लिए इसे पंक्ति 1 (उल्टा करने के लिए) में ले जाएँ। आज्ञा है
g/^/m0
। इसका अर्थ है विश्व स्तर पर, प्रत्येक पंक्ति के लिए g
; लाइन की शुरुआत से मेल खाता है, जो किसी भी चीज से मेल खाता है ^
; पता 0 के बाद इसे स्थानांतरित करें, जो पंक्ति 1 हैm0
।
- सब कुछ छपवाओ। आज्ञा है
%p
। इसका मतलब सभी लाइनों की सीमा के लिए है %
; लाइन प्रिंट करें p
।
- फ़ाइल को सहेजे बिना बलपूर्वक छोड़ दिया। आज्ञा है
q!
। इसका मतलब छोड़ दिया q
; जबरदस्ती !
।
# Generate a newline delimited sequence of 1 to 10
$ seq 10
1
2
3
4
5
6
7
8
9
10
# Use - to read from stdin.
# vim has a delay and annoying 'Vim: Reading from stdin...' output
# if you use - to read from stdin. Use --not-a-term to hide output.
# --not-a-term requires vim 8.0.1308 (Nov 2017)
# Use -E for improved ex mode. -e would work here too since I'm not
# using any improved ex mode features.
# each of the commands I explained above are specified with a + sign
# and are run sequentially.
$ seq 10 | vim - --not-a-term -Es +'g/^/m0' +'%p' +'q!'
10
9
8
7
6
5
4
3
2
1
# non improved ex mode works here too, -e.
$ seq 10 | vim - --not-a-term -es +'g/^/m0' +'%p' +'q!'
# If you don't have --not-a-term, use /dev/stdin
seq 10 | vim -E +'g/^/m0' +'%p' +'q!' /dev/stdin
# POSIX compliant (maybe)
# POSIX compliant ex doesn't allow using + sign to specify commands.
# It also might not allow running multiple commands sequentially.
# The docs say "Implementations may support more than a single -c"
# If yours does support multiple -c
$ seq 10 | ex -c "execute -c 'g/^/m0' -c '%p' -c 'q!' /dev/stdin
# If not, you can chain them with the bar, |. This is same as shell
# piping. It's more like shell semi-colon, ;.
# The g command consumes the |, so you can use execute to prevent that.
# Not sure if execute and | is POSIX compliant.
seq 10 | ex -c "execute 'g/^/m0' | %p | q!" /dev/stdin
इस पुन: प्रयोज्य बनाने के लिए कैसे
मैं एक स्क्रिप्ट का उपयोग करता हूं जिसे मैं कॉल करता हूं ved
(जैसे विम संपादक sed
) संपादित करने के लिए विम का उपयोग करने के लिए stdin
। इसे ved
अपने पथ में नामक फ़ाइल में जोड़ें :
#!/usr/bin/env sh
vim - --not-a-term -Es "$@" +'%p | q!'
मैं +
इसके बजाय एक कमांड का उपयोग कर रहा हूं +'%p' +'q!'
, क्योंकि विम आपको 10 कमांड तक सीमित करता है। इसलिए उन्हें विलय "$@"
करने से 9 की अनुमति मिलती है+
करने से 8 के बजाय कमांड रखने की ।
तो आप कर सकते हैं:
seq 10 | ved +'g/^/m0'
यदि आपके पास 8 विम नहीं है, तो इसे ved
इसके स्थान पर रखें:
#!/usr/bin/env sh
vim -E "$@" +'%p | q!' /dev/stdin
perl -e 'print reverse <>'
लेकिन यह संभवतः अन्य तरीकों पर भी लागू होता है)।