मुझे आपकी जैसी ही इच्छा थी: मैं सामान्य विम कमांड लिखना चाहता था और उन लोगों को एक पाइपलाइन स्ट्रीम संपादित करना था। मैं इस तरह (इतने सारे झंडे!) में सामान्य विम का उपयोग करने की कठिनाई से निराश था, जैसा कि डिफ़ॉल्ट विम विकल्पों द्वारा प्रदान किया गया था।
इसलिए, मैंने इसे करने के लिए विम पर एक छोटा आवरण लिखा: https://github.com/MilesCranmer/vim-stream/ । इसे कहते हैं vims
।
आवरण का दिल निम्न आदेश है:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
इसका उपयोग करते हुए, मैं जो कमांड जेनरेशन करता हूं, वह काफी संक्षिप्त रूप से काम करता है, और क्योंकि विम एक मोडल एडिटर है, इसलिए मैंने vims
एक मोडल स्ट्रीम एडिटर बनाया । तीन मुख्य मोड हैं जो पाइपलाइन-संपादन मानसिकता के लिए उपयोगी हैं:
[-t|--turn-off-mode] - (Default mode)
Every string is a vim command line, e.g., '%g/foo/d' deletes
all lines with foo.
[-e|--exe-mode] - Translated to '%g/$1/exe "norm $2"', see examples below
[-s|--simple-mode] - Like exe-mode, but runs on 1st line only
इसे देखो:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
तो, e
के अंत में जाता है Hello
, फिर a
शुरू होता है।
कुछ प्रशंसक, एक्स-मोड में, युक्त लाइनों पर टिप्पणी करने my_bad_var
और पूर्ववर्ती लाइन को हटाने के लिए।
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
जो अनुवाद करता है vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
- I
लाइन के शुरू में सम्मिलित करने के लिए कमांड //
होने के नाते , और टिप्पणी अनुक्रम होने के नाते।
\<esc>kdd
भागने की कुंजी को धक्का देता है, एक रेखा को ऊपर ले जाता है, फिर रेखा को हटाता है।
रेपो पर मेरे कुल 11 उदाहरण हैं, मैं आपको उन्हें जांचने के लिए प्रोत्साहित करता हूं। फिर से, यह विम के शीर्ष पर चल रहा है, यह धारा इनपुट के लिए sed की तरह अधिक विम बनाने का एक तरीका है (लेकिन आपके सभी प्रिय विम मैक्रोज़ को संरक्षित करना है!)।
|
चरित्र पाइप एक से दूसरे आदेश के उत्पादन में।wea-this
एक कमांड नहीं है। पाइपिंग का उपयोग उस चीज को प्राप्त करने के लिए नहीं किया जा सकता है जिसे आप या तो करना चाहते हैं; यह कीबोर्ड के नहीं, बाएं हाथ के अनुप्रयोग के विम का कारण होगा। यदि आप vim में एक बफर में स्टड प्राप्त करना चाहते हैं, तो इसे फ़ाइल नाम के लिए ऋण के साथ शुरू करेंecho Hello, world! | vim -
:।