2011-11-30 17 views
5

मैं अक्सर अपने आप कर इस तरह एक कार्यप्रवाह खोजें पिछला आदेश उत्पादन के n वें लाइन संपादित करने के लिए:फास्ट तरीका

$ find . |grep somefile 
./tmp/somefile.xml 
./test/another-somefile.txt 

(समीक्षा उत्पादन)

$ vim ./tmp/somefile.xml 

अब, यह साफ हो सकता है अगर वहाँ खोज कमांड के आउटपुट का उपयोग करने और इसे विम करने के लिए फ़ीड करने का कुछ सुविधाजनक तरीका था।

सबसे अच्छा मैं के साथ आ गया है:

$ nth() { sed -n $1p; } 
$ find . |grep somefile 
./tmp/somefile.xml 
./test/another-somefile.txt 

(समीक्षा उत्पादन)

$ vim `!!|nth 2` 

अगर वहाँ अन्य, शायद खूबसूरत हैं मैं सोच रहा था, एक ही बात को पूरा करने के तरीके?

स्पष्टीकरण के लिए, मैं & काटने के बिना फ़ाइल को पेस्टम को पेस्ट करने के बिना, पहले से कमांड कमांड से एनएच लाइन को पकड़ने का एक सुविधाजनक तरीका चाहता हूं, फ़ाइल के साथ माउस या टैब के साथ पेस्ट करें फ़ाइल पथ

उत्तर

4

रास्ता 1: सटीक फ़ाइल को विम करने के लिए पास न करें, लेकिन पूरे आउटपुट को पास न करें। vim में फ़ाइल

वर्तमान में आप दो चरणों में काम कर रहे हैं चुनें:

1 - लॉन्च खोज/ग्रेप ... cmd

2 - vim !! ....

यदि आप सुनिश्चित हैं कि आप खोज परिणाम से एक (या अधिक) फ़ाइल खोलने के लिए vim का उपयोग करना चाहते हैं। आप कोशिश कर सकते हैं:

find. (with grep if you like) |vim - 

तो आप vim में पूरे उत्पादन है, अब आप फ़ाइल आप संपादित करना चाहते करने के लिए कर्सर ले जाने के लिए, तो gf प्रेस vim जादू का उपयोग कर सकते हैं। (मैं कभी-कभी ऐसा करता हूं)

रास्ता 2: एक फ़ाइल प्राप्त करने के लिए, जिसे आप संपादित करना चाहते हैं, अपने खोज (या grep) में अपना रेगेक्स परिशोधित करें।

यह एक कठिन बात नहीं है। तो आप बस !! बना सकते हैं।

आपका nth() अच्छा है। हालांकि कल्पना करें कि उत्पादन में 30 लाइनें हैं, और आपकी फ़ाइल लाइन # 16 में बैठती है। आप इसे कैसे गिनते हैं? सुनिश्चित करें कि आप अंत में |nl जोड़ सकते हैं, फिर आप सीधे उपयोग नहीं कर सकते !! किसी भी अब ..

सिर्फ मेरी 2 सेंट

+0

मुझे लगता है कि कमांड को 'vim -'' पर पाइप करना और फिर 'gf' का उपयोग करना वह समाधान है जिसे मैं सबसे अधिक सहज महसूस करता हूं। हालांकि मुझे अपने vim को मुझे 'gf' करने की अनुमति देने से पहले फ़ाइल सूची बफर को सहेजने की आवश्यकता है। अस्थायी/छिपे बफर के रूप में stdin से vim इलाज बफर बनाने का कोई तरीका है? – Erik

+0

~ छिपी हुई 'को ~/.vimrc में जोड़ना चाल चल रहा है। सबको धन्यवाद! – Erik

+0

@ एरिक मैंने एक नया टैग "vim" जोड़ने के लिए अपना प्रश्न संपादित किया। आशा है कि आपको बुरा लगेगा। – Kent

1

आपकी टिप्पणी के बाद संशोधित। सुनिश्चित नहीं है कि यह "सुविधाजनक" है ..

command | tail -n3 | head -n1 | xargs vim 
+0

नहीं, मैं एक पिछला आदेश के उत्पादन से n वें लाइन हड़पने और vim को एक तर्क के रूप में यह फ़ीड करने के लिए एक सुविधाजनक तरीका चाहते हैं। – Erik

+0

ओह ठीक है। मैंने vim को आउटपुट जोड़ने के लिए xargs जोड़ा है, फिर – Miquel

0

शायद यही वह है जिसे आप ढूंढ रहे हैं?

find . -name "*somefile*" -exec vim -p {} \; 
0

आप एक इंटरैक्टिव समीक्षा चाहते हैं हो सकता है आप कुछ इस तरह का उपयोग कर सकते हैं:

TMP_LIST=""; for i in `find . | grep somefile`; do echo $i; read -p "(y/n)?"; [ $REPLY == "y" ] && TMP_LIST="$TMP_LIST $i"; done; vim $TMP_LIST 
+0

यह बहुत साफ है, लेकिन जो मैं ढूंढ रहा हूं वह नहीं। मुद्दा यह है कि मेरा वर्कफ़्लो 1) ढूंढें/ls/..., 2) एक फ़ाइल देखें जिसे मैं संपादित करना चाहता हूं, 3) उस फ़ाइल को माउस कट के बिना vim में जल्दी से खोलें या फ़ाइल नाम का पेस्ट या पथ को पूरा करने के लिए – Erik

0

आप लगभग यह किया !!

pearl.251> cat file1 
a b c d e f pearl.252> find . -name "file*" 
./file1 
./file2 
./file3 
./file4 
./file5 
./file6 
./file7 
pearl.253> vi `!!|awk 'NR==1'` 

अंतिम पंक्ति यहाँ overe vi में file1 खुल जाएगा।

+0

को स्पष्ट करने के लिए, मेरा समाधान काम करता है, लेकिन मैं सोच रहा था कि '!! nth 2' से भी एक सुंदर चीज़ प्राप्त करना संभव था। 'कुंजी स्वीडिश कीबोर्ड पर टाइप करने के लिए एक कुतिया है;) – Erik

संबंधित मुद्दे