तुम विम में एक तार "कैसे" करते हैं?


32

मान लीजिए कि आप निम्नलिखित का नमूना चलाते हैं:

let @z = system("date")

यह वर्तमान तिथि के स्ट्रिंग संस्करण को z रजिस्टर में डाल देगा, लेकिन स्ट्रिंग एक नई पंक्ति के साथ समाप्त हो जाएगी जो मुझे नहीं चाहिए। क्या chompस्ट्रिंग के अनुगामी न्यूलाइन्स से छुटकारा पाने के लिए एक अंतर्निहित तरीका (पर्ल के समान ) है?

जवाबों:


24

आप substitute()किसी फ़ंक्शन को उपयोग या परिभाषित कर सकते हैं :

function! Chomp(string)
    return substitute(a:string, '\n\+$', '', '')
endfunction

यह संस्करण systemआपके लिए कॉल करेगा और फिर परिणाम को चस्पा करेगा:

function! ChompedSystem( ... )
    return substitute(call('system', a:000), '\n\+$', '', '')
endfunction

(यह फ़ंक्शन मेरे इंगो-लाइब्रेरी प्लगइन के रूप में भी उपलब्ध है ingo#system#Chomped।)


यह काम करता है, लेकिन अजीब callवाक्यविन्यास क्यों ? क्यों नहीं बस देना Chompनामक पैरामीटर stringऔर उसके बाद से पारित a:stringकरने के लिए substitute?
bdesham

2
@bdesham क्योंकि इसके आउटपुट से ट्रेसिंग न्यूलाइन Chomp()को system()अलग करने और इसे वापस करने के लिए जो भी दलीलें दी जा रही हैं , वह पारित हो रही हैं।
जामसेन

सही। system()एक वैकल्पिक {input}तर्क है, और यह इनमें से किसी को भी उदारतापूर्वक संभालता है। यदि आपको इसकी आवश्यकता नहीं है, तो बस इसे पारंपरिक तरीके से करें।
इंगो करकट

25
let @z = systemlist('date')[0]

आपके लिए नई रूपरेखा निकालता है।


मुझे लगता है कि यह संभवतः वह दृष्टिकोण है जिसका मैं वास्तव में उपयोग करूंगा, लेकिन मैंने अन्य उत्तर को स्वीकार कर लिया क्योंकि यह अधिक सामान्यतः लागू होता है। (उदाहरण के लिए, यह अन्य
नए समाचारों को

5
ध्यान दें कि यह उन सिस्टमों के लिए सही ढंग से काम नहीं करेगा जो \nन्यूलाइन के अलावा किसी और चीज का उपयोग करते हैं । systemlist()केवल हटाता है \n, कोई भी नहीं \r
जैमेसन

4

Christian Brabandt ने superuser.com पर कई अलग-अलग तरीकों को सूचीबद्ध किया है ।

मुझे यह पसंद है क्योंकि यह छोटा है:

let @z = system("date")[:-2]

मुझे आश्चर्य है कि यह \r\nरेखा के प्रकार को कैसे संभालता है ...
x-yuri

@ x-yuri जो निश्चित रूप से जाँचने योग्य है, मुझे इस पर उद्धृत न करें, लेकिन मुझे लगता है कि विम-ऑन-विंडोज \nउन्हें वापस करने से पहले उन लाइन-एंडिंग को सामान्य कर देगा ।
joeytwiddle
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.